Sunteți pe pagina 1din 12

Subiectul I

1.
2.
a)

Varianta 15

!(4==2*2) F => d)

a
n
25
6
26
22
31
15
40
4
Se va afisa valoarea 4.
b)
#include<iostream.h>
unsigned int a, n, i;
int main()
{
cout<<"a=";
cin>>a;
cout<<"n=";
cin>>n;
for(i=1;i<=n;i++)
if(i%2==0)
a=a-i*i;
else
a=a+i*i;
cout<<a;
return 0;
}
c)
a
n

i
1
2
3
4
5
6

i%2=0
NU
DA
NU
DA
NU
DA

i%2=0

18
1
NU
19
2
DA
15
3
NU
24
4
DA
8
Trebuie citita valoarea 4 pentru a afisa rezultatul 8.
d)
daca n%2=1 atunci
a=n*n;
altfel
a=0;

Subiectul II
1. c)2
2. d) primul element introdus n stiv este ultimul
care poate fi extras
3.
s
i
abaemeiut
0
baemeiut
1
bemeut
2
4
bemeut
5
7
9
Se va afisa 9, apoi bemeut
4.
1
2
3
4
5
6
7
8

2,6,7
1,3,6
2,4,6
3,5,8
4,6
1,2,3,5
1,8
4,7

3
3
3
3
2
4
2
2

Gradul minim este 2 si il intalnim la nodurile 5,7,8.


5.
#include<iostream.h>
long a[5][5], i, n, j;
int main()
{
cout<<"n=";
do
cin>>n;
while(n<=9999 || n>99999);
for(i=1;i<=5;i++)
{
for(j=1;j<=5;j++)
a[i][j]=n%10;
n=n/10;
}
for(i=1;i<=5;i++)
{
for(j=1;j<=5;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}

Subiectul III
1. b) 100
2. f(34)=34+f(3)=34+3+f(6)=37+6+f(12)=43+12+f(2
4)=43+24+12+f(2)=67+2+12+f(4)=69+4+12=85
3.
#include<iostream.h>
long x, c;
int nr;
int main()
{
nr=0;
do

cout<<"x=";
cin>>x;
c=x;
while(c)
{
if(c%10==5) nr++;
c=c/10;
}
}while(x!=0);
cout<<"nr="<<nr;
return 0;
}
4.#include<iostream.h>
#include<fstream.h>
unsigned long k, x;
int OK;
int main()
{
ifstream f("BAC.IN");
OK=0;
while(f>>x)
if(x%2!=0)
{
k=x;OK=1;
}
if(OK)
cout<<k;
else
cout<<"nu exista numere impare";
f.close();
return 0;
}

Varianta 45

Subiectul I
1. b) x=y%10*10+y/10

2. a)
x
12

y
3

z
t
1
0
2
3
4
5
6
7
8
9
9
10
11
12
13
Se va afisa valoarea 9.
b) 19*2=38 => x=38
c)
citete x,y (numere naturale)
z1
t0
repeta
dac x%z=y atunci
tz

zz+1
pana cand x<z
scrie t
d)
#include<iostream.h>
unsigned int x, y, z, t;
int main()
{
cout<<"x=";
cin>>x;
cout<<"y=";
cin>>y;
z=1;
t=0;

x>=z
DA
DA
DA
DA
DA
DA
DA
DA
DA
DA
DA
DA
NU

x%z=y
NU
NU
NU
NU
NU
NU
NU
NU
DA
NU
NU
NU

while(x>=z)
{
if(x%z==y) t=z; z++;
}
cout<<t;
return 0;
}

Subiectul II
1. a)1
2. (1);(2);(2,4);(2,5) => d)2
3. Radacina este nodul 2 si ii are ca fii pe 1 si pe 7
,iar frunzele sunt 5, 6, 8, 9, deci 4.
4.
1
2
3
1
2
3
1
2
3
Cea mai mica valoare de pe a 2-a linie este 1.
5.
#include<iostream.h>
#include <string.h>
char sir[40],y[40];int i;
int main()
{
cout<<"Textul:";
cin.getline(sir,40);
for(i=0;i<strlen(sir);i++)
{
strcpy(y,sir);
strcpy(y+i,y+i+1);
cout<<y<<endl;
}
return 0;
}

Subiectul II
1.a) acb

2. f(4)=1+f(1)=1+1+f(-2)=1+1+1=3
f(11)=1+f(8)=1+1+f(5)=1+1+1+f(2)=1+1+1+1+f(1)=1+1+1+1+1=5
3.
#include<iostream.h>
float a[100], v[100];
int i, n, j, k, OK;
int main()
{
cout<<"n=";
cin>>n;
k=0;
for(i=1;i<=n;i++)
{
cout<<"Introduceti sirul:";
cin>>a[i];
}
for(i=1;i<=n;i++)
{
j=1;
while(OK==1 && j<=n)
{
if(a[i]==a[j])
OK=0;
j++;
}
if(OK==1)
{
k++;
v[k]=a[i];
}
}
for(i=1;i<=k;i++)
cout<<v[i]<<" ";
return 0;
}
4.

a)
#include<iostream.h>
#include<fstream.h>
int a[100], i, j, OK, n;
int main()
{
ifstream f("numere.txt");
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
f.close();
for(i=1;i<=99;i++)
{
OK=0;
j=1;
while(OK==0 && j<=n)
if(a[j]==i)
{
cout<<a[i];
OK=1;
}
}
return 0;
}
b) Eficienta consta in faptul ca pentru a afisa in
ordinea ceruta si a nu se afisa doua numere de 2 ori, le
comparam o singura data cu numere din intervalul
(0,100), fiind numere de 2 cifre. Astfel comprimam 2
operatii intr-una singura.

Varianta 75

Subiectul I
1. d) if(x<2 && x>-5)
{
x=x+1;
y=y-1;
}

2. a)
a
0

k
0

62

6225

622556

x
62521
6252
625
62
2571
257
25
2
56
614

x>99
DA
DA
DA
NU
DA
DA
NU
NU
NU
DA

622556
4
61
NU
61
Se va afisa valoarea 62255661.
b) 12, 34, 56, 78
c)
#include<iostream.h>
unsigned int x, k, a;
int main()
{
a=0;
k=0;
do
{
cout<<"x=";
cin>>x;
while(x>99)
x=x/10;
if(x>9)
{
a=a*100+x;
k++;
}
}while(k!=4);
cout<<a;
return 0;

x>9

k=4

DA

NU

DA
NU
DA

NU
NU
NU

DA

DA

}
d)
a0
k0
cat timp k<4 executa
citete x (numr natural)
ct timp x > 99 execut
x [x/10]

dac x > 9 atunci
aa*100 + x
kk+1

Subiectul II
1. d) examene
2. n=6 => numarul maxim de muchii este (n*(n1))/2=15. Sunt 7 muchii in graf => mai trebuie
adaugate 15-7=8 muchii.
3. ADD 4, ELIM, ELIM, ADD 5, ADD 6, ELIM, ADD7
4. Numarul minim de arce care trebuie adaugate
este 2, arcele sunt: (2,3) si (4,6).
5.
#include<iostream.h>
int a[51][51], i, j, n, m;
int main()
{
cout<<"n=";
do
cin>>n;
while(n<1 ||n>51);
cout<<"m=";
do

cin>>m;
while(m<1 || m>51);
for(i=3;i<=m;i++)
{
for(j=1;j<=n;j++)
a[i][j]=0;
for(j=1;j<=n;j++)
a[i+1][j]=0;
i=i+2;
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;

Subiectul III
1. f(2758)=10-(2+f(275))=10-(10-(2+f(27)))=10(10-(10-(2+f(2))))=10(-10-(10-(10-(2+f(2)))))=106=4 => d)4
2. 2, 0, 7, -6, 5, 10
3.
int Invers(int n, int x)
{

x=0;
while(n)
{
x=x*10+n%10;
n=n/10;
}
return x;

4.
a)
#include<iostream.h>
#include<fstream.h>
int n, x, k, i;
int Invers(int n, int x)
{
x=0;
while(n)
{
x=x*10+n%10;
n=n/10;
}
return x;
}
int main()
{
ifstream f("numere.in");
ofstream g("numere.out");
f>>n;
for(i=1;i<=n;i++)
{
f>>k;
if(Invers(k,x)==k)
g<<k<<" ";
}
f.close();
g.close();
return 0;
}
b) Se citesc numerele din fisier pe rand si se
verifica fiecare pe rand daca inversul sau este
asemenea lui. Daca da, se scrie in fisierul numere.
out, altfel trecandu-se la urmatorul numar din
fisier.