Sesiunea iulie

Subiecte admitere

Rezolvare subiecte admitere

Subiectul I

a)

#include <iostream>

using namespace std;

int maxc(int m, int a[100][200], int c)

{

int i,max=a[0][c];

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

if(max<a[i][c])

max=a[i][c];

return max;

}

int minc(int m, int a[100][200], int c)

{

int i,min=a[0][c];

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

if(min>a[i][c])

min=a[i][c];

return min;

}

int maxl(int n, int a[100][200], int l)

{

int j,max=a[l][0];

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

if(max<a[l][j])

max=a[l][j];

return max;

}

int minl(int n, int a[100][200], int l)

{

int j,min=a[l][0];

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

if(min>a[l][j])

min=a[l][j];

return min;

}

int sa(int m,int n, int a[100][200])

{

int i,j,s=0;

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

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

if( ( a[i][j]==maxc(m,a,j)&&a[i][j]==minl(n,a,i) ) || ( a[i][j]==minc(m,a,j)&&a[i][j]==maxl(n,a,i) ) )

s++;

return s;

}

int main()

{

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

int m,n,i,j;

cout<<"Numar linii= ";cin>>m;

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

int a[100][200];

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

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

cin>>a[i][j];

cout<<"Numarul de elemente 'sa' este "<<sa(m,n,a);

return 0;

}

b)

#include <iostream>

#include <cmath>

using namespace std;

int nrcifre(int n)

{

int s=0;

while(n)

{

n=n/10;

s++;

}

return s;

}

long fact(long n)

{

long i,f=1;

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

f=f*i;

return f;

}

int nr(int n)

{

int aux=0,i,m;

m=pow(10,nrcifre(n)-1);

aux=n%m;

m=n/pow(10,nrcifre(n)-1);

aux=aux*10+m;

return aux;

}

int cifre(int n)

{

int aux,aux2;

long t;

t=fact(nrcifre(n))-1;

aux=nr(n);

aux2=n;

while(t)

{

if(aux2<aux)

aux2=aux;

aux=nr(aux);

t--;

}

return aux2;

}

int main()

{

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

int n;

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

cout<<cifre(n);

return 0;

}

c)

#include <iostream>

using namespace std;

int pozc1(int X[100], int n, int v)

{

int i=0;

while(i<n&&X[i]<v)

i++;

if(i<n&&X[i]==v)

return i;

else

return -1;

}

int cautbin(int p,int u,int X[100],int v)

{

int m;

if(p>u)

m=-1;

else

{ m=(p+u)/2;

if(X[m]==v)

return m;

else

if(X[m]>v)

cautbin(p,m-1,X,v);

else

cautbin(m+1,u,X,v);

}

}

int pozc2(int X[100], int n, int v)

{

int p=0,u=n-1,m;

m=cautbin(p,u,X,v);

return m;

}

int main()

{

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

int n,i,a[100],v;

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

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

cin>>a[i];

cout<<"v=";cin>>v;

cout<<pozc1(a,n,v);

cout<<endl<<pozc2(a,n,v);

return 0;

}

Subiectul II

a)

F(n,k) reprezinta suma in ordine descrescatoare de la n la k: n+(n-1)+(n-2)+...+k;

Astfel, F(98,1) reprezinta suma 98+97+...+1;

Suma 1+2+...+98 se poate calcula cu formula n*(n+1)/2

b)

O solutie ar fi n=75 si k=1

Suma 1+2+...+75=75*(75+1)/2=2850

c)

F(n,k) calculeaza suma numerelor de la k la n: k+(k+1)+(k+2)+...+n

Subiectul III

#include <iostream> // Inceput program.

#include <cmath>

using namespace std;

int prim(int n) // Cu aceasta functie verificam daca un numar este prim.

{

int s=0,i; // s reprezinta numarul de divizori ai numarului n.

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

if(n%i==0) // Daca restul impartirii lui n la i este 0 atunci inseamna ca i este divizor.

s++; // Astfel numarul de divizori creste de fiecare data cand i este divizor.

if(s==2) // Un numar este prim daca numarul de divizori ai acestuia este 2.

return 1; // Returnam valoarea 1 in cazul in care numarul n este prim.

else

return 0; // Returnam valoarea 0 in caz ca numarul n nu este prim.

}

int nrcifre(int n) // Cu aceasta functie calculam numarul de cifre ale numarului n.

{

int s=0; // Cu ajutorul variabilei s calculam numarul de cifre.

while(n) // Cat timp partea intrega a numarului n este diferita de 0, urmatoarea secventa se va repeta.

{

n=n/10; // n ia valoarea partii intregi al calculului n/10.

s++; // Dupa fiecare impartire a lui n, valoarea numarului de cifre, calculat prin s, creste.

}

return s; // Returnam numarul de cifre prin variabila s.

}

int magic(int n) // Cu aceasta functie verificam daca un numar este magic.

{

int i,p=1,m; // Variabila p este o variabila de control. Initial numarul n este considerat a fi magic, astfel, variabila p are valorea 1.

if(prim(n)==0 || prim(n/pow(10,nrcifre(n)-1))==0 ) // Verificam daca numarul n si prima sa cifra sunt numere prime.

p=0; // Daca numerele nu sunt prime, valoarea lui p devine 0. Valoarea 0 semnifica faptul ca numarul nu este magic.

for(i=1;i<nrcifre(n);i++) // Aici se verifica daca sufixele lui n sunt numere prime. Variabila m este o variabila ajutatoare.

{

m=pow(10,i); // m ia valoarea numarului 10 la puterea i.

if(prim(n%m)==0) // Un sufix al numarului n este restul impartirii lui n la m. Se verifica daca acest sufix este prim.

p=0; // In cazul in care sufixul nu a fost prim, atunci valoarea lui p devine 0.

}

return p; // Se returneaza valoarea lui p, 1, in caz ca numarul este magic, 0, in caz ca numarul nu este magic.

}

int main() // Acesta este programul principal.

{

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

int n,m,i,j,t=1,a[100][100],X[10000]; // n si m reprezinta numarul de linii respectiv coloane ale matricii 'a'.

cout<<"n=";cin>>n; // Se citeste numarul de linii ale matricii 'a'.

cout<<"m=";cin>>m; // Se citeste numarul de coloane ale matricii 'a'.

for(i=1;i<=n;i++) // Se citesc elementele matricii 'a'.

for(j=1;j<=m;j++) // Cu ajutorul variabilelor i, j se parcurg liniile, respectiv coloanele in citirea matricii.

cin>>a[i][j];

for(j=1;j<=m;j++) // Aici are loc construirea sirului 'X'.

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

{

X[t]=a[i][j];

t++; // Variabila t reprezinta numarul de elemente ale sirului X.

}

int p1=0,p,u1,u,s=0; // Variabila p1 tine mine pozitia inceputului secventei de numere magice.

i=1;

while (i<t-1)

{

while(!magic(X[i]+X[i+1])&&i<t-1) // Cautam prima secventa de numere magice.

i++;

p=i; // Variabila u1 memoreaza pozitia ultimei valori din secventa de numere magice.

while(magic(X[i]+X[i+1])&&i<t-1)

i++; // Cautam prima secventa de numere magice.

u=i;

if((u-p)>=s)

{

p1=p;u1=u;s=u-p;

}

}

if(s>0) // Daca variabila s are valoarea mai mare ca 0 atunci inseamna ca exista o secventa de numere magice.

for(i=p1;i<=u1;i++) // Afisam secventa de numere magice.

cout<<X[i]<<" ";

else

cout<<"Nu exista aceasta secventa"; // Daca variabila s nu are valoarea mai mare ca 0 atunci inseamna ca nu exista o secventa de numere magice.

return 0;

} // Sfarsit program.