Sesiunea speciala

Subiecte sesiunea speciala Bac 2016

Rezolvare sesiunea speciala Bac 2016

Subiectul I

1. a

2.

a) 3

b) 18

c) citeste n

(numar natural nenul)

k<-1

m<-1

- daca n>9 atunci

| -repeta

| | - daca n%10=[n/10]%10 atunci

| | | k<-k+1

| | | -daca k>m atunci

| | | | m<-k

| | | |_

| | |

| | | altfel

| | | k<-1

| | |_

| |

| | n<[n/10]

| | pana cand n<10

| |_

|

|_

scrie m

d)

#include <iostream>

using namespace std;

int main()

{

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

int n,k,m;

cin>>n;

k=1;

m=1;

while(n>9)

{

if(n%10==n/10%10)

{

k=k+1;

if(k>m)

m=k;

}

else

k=1;

n=n/10;

}

cout<<m;

return 0;

}

Subiectul II

1. d

2. a

3. 2, 3, 1, 7

4.

s=0;

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

s=s+p[i].pretOra*p[i].nrLocuriInchiriate;

5.

Metoda 1

#include <iostream>

#include <string.h>

using namespace std;

int main()

{

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

int n,k,i;

char b[440]="";

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

struct cuvinte

{

char cuvant[21];

}a[20];

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

{

cout<<"Introduceti cuvantul "<<i+1<<": ";

cin>>a[i].cuvant;

cin.get();

}

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

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

if(strlen(a[i].cuvant)==k)

{

strcat(b,a[i].cuvant);

strcat(b," ");

}

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

if(strlen(a[i].cuvant)!=k)

{

strcat(b,a[i].cuvant);

strcat(b," ");

}

cout<<b;

return 0;

}

Metoda 2

#include <iostream>

#include <string.h>

using namespace std;

int main()

{

struct cuv

{

char s[20];

int lung;

} cit[20];

char sir[400]="",man[400]="";

int n,k;

cin >>n;

for(int i=1;i<=n;i++)

{

cin>>cit[i].s;

cit[i].lung=strlen(cit[i].s);

}

cin>>k;

for(int i=1;i<=n;i++)

{

if(cit[i].lung==k)

{

strcat(sir,cit[i].s);

strcat(sir," ");

}

else

{

strcat(man,cit[i].s);

strcat(man," ");

}

}

strcat(sir,man);

cout << sir << endl;

return 0;

}

Subiectul III

1. b

2. 010011

010100

3.

#include <iostream>

using namespace std;

int prim(int n)

{

int i,s=0;

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

if(n%i==0)

s++;

if(s==2)

return 1;

else

return 0;

}

/*Functia "prim" alternativa:

unsigned int prim(unsigned int n)

{

if(n<2) //inutil din moment ce in enunt se specifica ca n∈[2,109]

return 0;

if(n==2)

return 1;

if(n%2==0) // se poate inlocui cu operatiile pe biti if(n&1==0)

return 0;

unsigned int i;

for(i=3;i*i<=n;i=i+2)

if(n%i==0)

return 0;

return 1;

}

*/

void pr(int n, int b[100000])

{

int i;

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

if(n%i==0&&prim(i))

b[i]=1;

}

int minDivPrim(int n)

{

if(prim(n))

return n;

int b[100000]={0},a[100000]={0},j=2,t=0,i,p;

pr(n,b);

while(t==0)

{

pr(j,a);

p=1;

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

if(a[i]!=b[i])

p=0;

if(p==1)

t=1;

else

{j++;

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

a[p]=0;

}

}

return j;

}

int main()

{

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

int n;

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

cout<<minDivPrim(n);

return 0;

}

4.

b)

#include <iostream>

#include <fstream>

#include <cmath>

using namespace std;

int main()

{

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

ofstream f("bac.out");

int i,n,t;

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

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

{

t=(i+1)/2*pow(-1,i+1);

f<<t<<" ";

}

f.close();

return 0;

}

a)

Programul se bazeaza pe observatia ca termenul "al x-lea" din sirul nostru se calculeaza dupa formula (x+1)/2*pow(-1,x+1). Acest lucru se deduce usor dupa ce scriem cativa termeni ai sirului calculati dupa formula din enuntul problemei. Programul este eficient deoarece: este liniar, nu foloseste un tablou pentru memorarea termenilor sirului, este de tipul O(n).