Simulare Mate-Info

Subiecte Simulare Bac 2016 Mate_Info

Rezolvare Simulare Bac 2016_Mate-Info

Subiectul I

1. c

2.

a) 634

b) 592, 590, 591, 596, 0

c)

m<-0

-repeta

| citeste x

| (numar natural)

| y<-0

| c<-y%10

| -cat timp c>y%10 executa

| | c<-y%10

| | y<-[y/10]

| |_

|

| -daca y<>0 atunci

| | m<m*10+c

| |_

|

| pana cand x=0

|_

scrie m

d)

#include <iostream>

using namespace std;

int main()

{

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

int m,x,y,c;

m=0;

do

{

cin>>x;

y=x;

do

{

c=y%10;

y=y/10;

}while(c>y%10);

if(y!=0)

m=m*10+c;

}while(x!=0);

cout<<m;

return 0;

}

Subiectul II

1. d

2. b

3. if(t1.baza1*t1.inaltime1==t2.baza2*t2.inaltime2)

cout<<"aceeasi arie";

else

cout<<"arii diferite";

4. if( (i+j)%2==0)

a[i]="! ";

else

a[i]="? ";

5.

#include <iostream>

#include <string.h>

using namespace std;

int nrc(char a[101],char i)

{

int j,s=0;

for(j=0;j<strlen(a);j++)

if(a[j]==i)

s++;

return s;

}

int main()

{

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

char a[101],b[101],c;

int p=1;

cout<<"a=";cin.get(a,100,'\n');

cin.get();

cout<<"b=";cin.get(b,100,'\n');

cin.get();

for(c='a';c<'z';c++)

if(nrc(a,c)!=nrc(b,c))

p=0;

if(p==1)

cout<<"DA";

else

cout<<"NU";

return 0;

}

Subiectul III

1. c

2. rusi

sale

3.

#include <iostream>

using namespace std;

int sumadiv(int n)

{

int i,s=0;

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

if(n%i==0)

s=s+i;

return s;

}

int sPar(int n)

{

int i;

i=n+1;

while(sumadiv(i)%2!=0 || i%2!=0)

i++;

return i;

}

4.

b)

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

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

ifstream f("bac.in");

int a[1000],b[1000],x,i,p=0;

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

{a[i]=0;

b[i]=0;

}

while(f>>x)

{

if(x>999)

a[x%1000]++;

else

if(x<=999 && x>=100)

b[x]++;

}

for(i=100;i<=999;i++)

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

{cout<<i<<'\n';

p=1;

}

if(p==0)

cout<<"Nu exista";

f.close();

return 0;

}

a)

Cu ajutorul variabilei "x" am citit numerele din fisier. Daca numarul citit este mai mare decat 999, atunci in tabloul "a[1000]", declarat la inceput cu toate valorile 0, pe pozitia x%1000 din tablou, valoarea acesteia creste. Astfel, in tabloul "a" retinem toate sufixele numerelor cu mai mult de trei cifre. Daca numarul citit este mai mic sau egal cu 999 si mai mare sau egal cu 100, atunci pe pozitia b[x], valoarea acesteia creste ( b[1000] este un tablou declarat la inceput cu toate valorile 0).

Cu ajutorul variabilei "i" parcurgem tablourile "a" si "b" incepand de la pozitia 100 pana la pozitia 999. Daca in ambele tablouri pe pozitia "i" nu se afla valoarea 0, atunci se afiseaza valoarea "i". In acest caz, valoarea variabile "p" declarata la inceput cu 0 devine 1. Daca valoarea variabile "p" ramane "0" se afiseaza mesajul "Nu exista".

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