Bacalaureat 2011-Sesiunea iunie-iulie

Subiecte bac 2011-Sesiunea de vara

Rezolvare bac 2011-Sesiunea de vara

Subiectul I

1. b

2.

a) 1, 1, 2, 2, 3

b)

cel mai mic n: 31

cel mai mare n: 35

c) citeste n,k

t<-1

- pentru i<-1,n executa

| scrie t,' '

| - daca i%t=0 executa

| | t<t+1

| |_

|_

d)

#include <iostream>

using namespace std;

int main()

{

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

unsigned int n,k;

int i,t;

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

cout<<"k=";cin>>k;

t=0;

while(n>=1)

{

if(n>k)

i=k;

else

i=n;

t=t+1;

n=n-i;

while(i>=1)

{cout<<t<<", ";

i=i-1;

}

}

return 0;

}

Subiectul II

1. d

2. c

3. 2, 3

4. for(i=0;i<5;i++)

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

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

5.

#include <iostream>

#include <string.h>

using namespace std;

int main()

{

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

char a[21],b[21];

int i,n,nc=0;

do

{

cout<<"Introduceti un numar cuprins intre 2 si 20 : ";cin>>n;

}while(n<2 || n>20);

cin.get();

cout<<"Introduceti primul cuvant: ";cin>>a;

for(i=n;i>1;i--)

{cout<<"Mai introduceti "<<i-1<<" cuvinte: ";cin>>b;

if(strstr(b,a)==b)

nc++;

}

cout<<"Numarul de cuvinte care incep cu primul cuvant: "<<nc;

return 0;

}

Subiectul III

1. c

2. (violet, albastru, galben)

(violet, albastru, verde)

3.

#include <iostream>

using namespace std;

void inserare(unsigned int n,unsigned int a[40] )

{ int i,t,p=0;

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

if(a[i]%2==0)

{

for(t=n+p;t>i;t--)

a[t+1]=a[t];

a[i+1]=2011;

p++;

}

n=n+p;

}

4.

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

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

ofstream f("BAC.TXT");

unsigned int s1,s2,i;

do

{

cout<<"Introduceti un numar mai mare ca 0 si mai mic sau egal cu 18: ";cin>>s1;

}while(s1<=0 || s1>18);

do

{

cout<<"Introduceti un numar cuprins intre 0 si 18: ";cin>>s2;

}while(s1<0 || s1>18);

for(i=10000;i<=99999;i++)

if( ((i%10)+(i/10)%10==s2) && ( (((i/1000)%10)+(i/10000))==s1) )

f<<i<<endl;

f.close();

return 0;

}

Am citit de la tastatura 2 valori pentru "s1" si "s2" care sa apartina intervalului cerut folosind "do{....}while(...);" (cu toate ca la BAC, validarea enuntului nu este necesara). Pentru fiecare numar de la 10000 la 99999 am calculat suma primelor 2 cifre si suma ultimelor 2 cifre. Daca suma primelor 2 cifre este egala cu "s1" si suma ultimelor 2 cifre este egala cu "s2", atunci numarul se scrie in fisier urmat de instructiunea de sfarsit de rand, "endl". Programul este eficient deoarece nu se foloseste de un tablou, este liniar, este de tipul O(n).

Observatie:

Aceasta rezolvare nu este 100% eficienta, datorita faptului ca programul foloseste un numar mare de operatii. Cei care doresc, pot lasa in rubrica de comentarii un program 100% eficient.