Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 10

Test 1

Sub I.1.
1 2 3 4 5
a c d b c

Sub II.
1.
a) 2020
b) N=49 x=9,44 sau x=0,2
c) //banal
d) citeşte n (număr natural)
p=1; m=0;
┌cât timp n≠0 execută
│ citește x (număr natural)
| x= [x/p]
│ dacă x≠0 atunci c=x%10
| altfel c=n%10;
│ m=c*p+m
│ n=[n/10]
│ p=p*10;
scrie m;
2.
struct triunghi
{
struct {int x,y;}A,B,C;
}t;

3. 8viCtORIe

Sub III.
1.
void putere(int n,int &d, int &p)
{
int d1,p1;
p=0;d=2;
while(n%2==0)
{
n/=2;p++;
}
d1=3;
while(n!=1)
{
p1=0;
while(n%d1==0)
{
n/=d1;p1++;
}
if(p1>=p){d=d1;p=p1;}
d1=d1+2;
}
}
2.
#include <fstream>
using namespace std;
int n,k,a[21][401];
int main()
{
int i,j,t;
cin>>n>>k;
for(i=1;i<=n;i++)
{
t=i;
for(j=1;j<=n*k;j++)
{
a[i][j]=t;
if(j%k==0)t++;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n*k;j++)
cout<<a[i][j]<<' ';
cout<<'\n';
}
return 0;
}

3. a.
#include <fstream>
#include <iostream>
using namespace std;
ofstream fout("bac.txt");

int n,k;

int main()
{
int x,y,z;
cin>>y>>z;
fout<<z<<' '<<y<<' ';
do
{
x=3*y-z;
fout<<x<<' ';
z=y;y=x;
}
while(x!=1);
fout<<1;
return 0;
}
3.b.
Algoritmul este unul liniar si nu memoreaza toti termenii sirului. Presupunem ca x, y si z sunt trei termeni
consecutivi din sir; Se observa faptul ca termenul care trebuie afisat se poate afla dupa formula x=3*y-z, iar
apoi trebuie reactualizati termenii.
Test 2
Sub I.1.
1 2 3 4 5
d c b b a
Sub II.
1.
a) 20950
b) 20204, 40404,60604
c) //banal
d) //banal

2.
struct specie
{
int cod,nrExemplare,varsta[10];
}s[20];
3.
for(i=0;i<5;i++)
for(j=0;j<7;j++)
if(i==0||j==0)a[i][j]=1;
else a[i][j]=(a[i-1][j]+a[i][j-1])%10;

Sub III.
1.
void fii(int n)
{
int d;
for(d=1;d<n/d;d++)
if(n%d==0)cout<<'('<<n/d<<' '<<d<<')';
}

2.
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char s[100];
int i,j;
cin.getline(s,101);
i=0;
while(i<strlen(s))
{
if(s[i]=='-')
{
j=i+1;
while(s[j]!=' '&&j<strlen(s))j++;
strcpy(s+i,s+j);
}
i++;
}
cout<<s;
return 0;
}
3. a

#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("bac.in");
int main()
{
int x,m1=0,m2=0,m3=0;
while(fin>>x)
if(x%100==20)
if(x>m1){m3=m2;m2=m1;m1=x;}
else if(x>m2){m3=m2;m2=x;}
else if(x>m3)m3=x;
cout<<m3<<' '<<m2<<' '<<m1;
return 0;
}

3.b
Citim pe rand valorile din fisier si prelucram doar valorile care indeplinesc conditia ceruta. Le vom retine in
variabilele m3<m2<m1.
Test 3
Sub I.1.
1 2 3 4 5
d b c a b

Sub II.
1.
a) 1 275
b) 1234 (afiseaza 1 si 0) respectiv 4321 (afiseaza -1 si 0)
c) //banal
d) //banal
2.
struct cerc
{
struct{float x,y;}centru;
float raza;
}fig;
3. for(p=0;p<strlen(s);p++)
if(s[p]!='A')cout<<s[p];
else if(s[p-1]!='I'&&s[p+1]!='I')cout<<s[p];
Sub III.
1.
int factori(int n,int m)
{
int r,d,p,nr;
while(n%m!=0)
{
r=n%m;
n=m;m=r;
}
p=0;
while(m%2==0){p++;m/=2;}
if(p!=0)nr=1;
else nr=0;
d=3;
while(m!=1)
{
p=0;
while(m%d==0){p++;m/=d;}
if(p!=0)nr++;
d=d+2;
}
return nr;
}

2.

#include <iostream>
using namespace std;
ifstream fin("bac.in");
int main()
{
int n,i,j,a[21][21];
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n+1-i;j++)
{
a[i][j]=n-i-j+1;
a[n+1-j][n+1-i]=a[i][j];
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<'\n';
}
return 0;
}

3.a)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("bac.in");
int main()
{
int x,i=0,p=0,u;
while(fin>>x)
{
i++;
if(x<0)
if(p==0){p=i;u=i;}
else u=i;
}
if(i-p+1>u)cout<<i-p+1;
else cout<<u;
return 0;
}

3.b) Problema se reduce la determina pozitia primului numar negativ citit (fie acesta p), respectiv a
ultimului numar negativ citit (fie aceasta u). Solutia problemei este data de valoarea maxima dintre n-p+1 si
u, unde n reprezinta numarul de numare citite.
Test 4
Sub I.1.
1 2 3 4 5
a b d c b

Sub II.
1.
a) 3334
b) 1014, 1015, 1016, 1017
c) //banal
d) //banal
2.
struct poliedru
{
int NrVarfuri;
float Muchie;
struct
{
float FataMuchie,FataFata;
}Unghi;
}p;

3. Opusqrdzdce

Sub III.
1.
void generatoare(int n)
{
int a,b,ok=0;
for(a=2;a<=n/2;a+=2)
for(b=1;b<=n/2;b++)
if(a*b+a/b==n)
{
cout<<a<<'-'<<b<<' ';
ok=1;
}

if(ok==0)cout<<"nu exista";
}

2.
#include <iostream>
using namespace std;
int main()
{
int n,m,a[21][21],i,j,ok,c=0;
cin>>m>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
for(j=2;j<=n;j++)
{
ok=1;
for(i=1;i<=m&&ok==1;i++)
if(a[i][j]+a[i][1]!=1)ok=0;
if(ok==1)c++;
}
cout<<c;
return 0;
}

3. a)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("bac.txt");
int main()
{
int x,y,ap,gasit=0;
fin>>x;ap=1;
while(fin>>y)
if(y==x)ap++;
else
{
if(ap==2){cout<<x<<' ';gasit=1;}
x=y;ap=1;
}
if(ap==2){cout<<x;gasit=1;}
if(gasit==0)cout<<"nu exista";
return 0;
}
3.b) Pentru fiecare valoare citita determinam numarul de aparitii al acesteia; acest lucru il realizam
comparand valoarea cititita cu cea citita anterior. Vom afisa valorile care au aparut doar de doua ori.
ATENTIE la tratarea ultimei valori citite.
Test 5
Sub I.1.
1 2 3 4 5
a b c b a

Sub II.
1.
a) D 10
b) 2, 3 , 5, 6, 7, 8
c) //banal
d)
citeste n;
daca [sqrt(n)]=sqrt(n) atunci scrie ‘D’,[sqrt(n)];
altfel scrie ‘N’;
2.
struct ecuatie
{
int numar;
struct
{
float pre,pim;
}solutie[100];
}s;

3.
for(i=0;i<6;i++)
for(j=0;j<6;j++)
if(i<3)
if(j>=i&&j<=5-i)
if(j<3)a[i][j]='(';
else a[i][j]=')';
else a[i][j]='*';

else
if(j>=5-i&&j<=i)
if(j<3)a[i][j]='(';
else a[i][j]=')';
else a[i][j]='*';

Sub III.
1.
int baza(int n)
{
int cmax=0,c;
do
{
c=n%10;
if(c>cmax)cmax=c;
n/=10;
}
while(n!=0);
if(cmax<=1)return 2;
else return cmax+1;
}
2.
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int c=0;
char s[100],*p;
cin.get(s,101);
p=strtok(s," ");
while(p!=NULL)
{
if(p[0]>='0'&&p[0]<='9'&&strchr(p,',')==NULL)c++;
p=strtok(NULL," ");
}
cout<<c;
return 0;
}

3. a)

#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("bac.txt");
int main()
{
int x,s,smax;
fin>>x;
s=x;smax=x;
if(s<0)s=0;
while(fin>>x)
{
s=s+x;
if(s>smax)smax=s;
if(s<0)s=0;
}
cout<<smax;
return 0;
}

3.b)
Se parcurge o singură dată şirul. Pe lângă smax, care memorează valoarea maximă a unei secvenţe, se mai
păstrează o valoare s a unei secvenţe curente pozitive. La ce foloseşte s? Practic se va împărţi şirul în
subsecvenţe cât mai lungi de sume pozitive sau negative. Cele pozitive sunt candidate la suma maximă, cele
negative nu. De exemplu, dacă şirul a este 4 -6 7 2 -1 4 -10 -3 9 2 -2 , atunci secvenţa formată din primele
două numere (adică 4, -6) este de sumă negativă. Ea nu va putea contribui la suma maximă globală, deci o
eliminăm. În schimb, în secvenţa 7, 2, -1 suma s este 8 şi chiar dacă am efectuat o scădere cu 1, continuăm
să o "prelungim" cu valoarea 4. Am obţinut acum şi suma maximă 12 a unei secvenţe: 7, 2, -1, 4. Ideea va fi
ca la fiecare pas să adunăm la s valoarea curentă citită, actualizăm dacă este cazul suma maximă şi, dacă s a
devenit negativă, atunci o reiniţializăm cu 0.

You might also like