Bacalaureat 2016-Sesiunea iunie-iulie

Subiecte bac 2016-Sesiunea de vara

Rezolvare bac 2016-Sesiunea de vara

Subiectul I

1. d

2.

a) 14 28

b) 4 6 5

c) citeste m,n,x

(numere naturale nenule, m<n)

p<- 0

-repeta

| -daca m%x=0 si n%x=0 atunci

| | p<- x

| | altfel

| | -daca m%x=0 atunci

| | | n<-n-1

| | | altfel

| | | m<m+1

| | |_

| |_

|

| pana cand m=n sau p=x

|_

scrie m, ' ', n

d)

#include <iostream>

using namespace std;

int main()

{

cout << "Hello world!" << endl;

int m,n,x,p;

p=0;

cin>>m>>n>>x;

while(m<n&&p==0)

{

if(m%x==0 && n%x==0)

p=x;

else

if(m%x==0)

n=n-1;

else

m=m+1;

}

cout<<m<<" "<<n;

return 0;

}

Subiectul al II-lea

1. a

2. b

3. 2,3,8

4. 11matematica

5.

#include <iostream>

using namespace std;

int main()

{

cout << "Hello world!" << endl;

int i,j,n;

cout<<"n=";cin>>n;

int a[n][n];

for(i=0;i<n;i++)

a[i][0]=i+1;

for(j=0;j<n;j++)

a[n-1][j]=n;

for(j=1;j<n;j++)

for(i=0;i<n-1;i++)

a[i][j]=a[i][j-1]+a[i+1][j-1];

for(i=0;i<n;i++)

{for(j=0;j<n;j++)

cout<<a[i][j]<<" ";

cout<<endl;

}

return 0;

}

Subiectul al III-lea

1. c

2. (pere, fragi, zmeura), (mure, afine, zmeura)

3.

int cifreImpare(int n)

{

int aux=0,aux2=0,aux3;

aux3=n;

while(n)

{

if(n%10%2==0)

aux=aux*10+n%10;

n=n/10;

}

while(aux)

{

aux2=aux2*10+aux%10;

aux=aux/10;

}

if(aux2==aux3 || aux2==0)

return -1;

else

return aux2;

}

4.

b)

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

cout << "Hello world!" << endl;

ifstream f("numere.in");

int n,x,y=0,i=1,p=0;

f>>n;

while(f>>x)

{

while(i<x)

{ if(i!=y)

{cout<<i<<" ";

p=1;

}

i++;

}

f>>y;

if(x!=y)

i++;

while(i<y)

{

cout<<i<<" ";

i++;

p=1;

}

}

i=y+1;

while(i<=n)

{

cout<<i<<" ";

i++;

p=1;

}

if(p==0)

cout<<"Nu exista";

f.close();

return 0;

}

a)

Am initializat variabila "i" cu valoarea 1. Cat timp valoarea lui "i" este mai mica decat numarul citit, afisam valoarea lui "i" urmat de un spatiu si il marim pe "i". Deoarece sirul este strict crescator, il marim pe "i" doar daca urmatorul numar din fisier este strict mai mare decat precedentul. Dupa terminarea citirii numerelor din sir, in caz ca valoarea lui "i" este mai mica decat valoarea lui "n", afisam valoarea lui "i" urmat de un spatiu si il marim pe "i" pana cand valoarea lui "i" este mai mare decat valoarea lui "n".

Cu ajutorul variabilei "p" initializata la inceput cu valoarea 0, contorizam existenta valorilor cerute. Valorile cerute exista daca l-am afisat pe "i" cel putin o data. In acest caz, valoarea lui "p" devine 1. In cazul in care valoarea lui "p" a ramas 0, afisam mesajul corespunzator.

Programul este eficient deoarece: este de tipul O(n), nu foloseste un tablou, este liniar, parcurge o singura data fisierul.