info

  problema 1
  // 1. Se citesc numere intregi de la tastatura pâna la întâlnirea lui 0.
//Cerin?e:
//a) Sa se afioeze numerele citite;
//b) Sa se afioeze numerele care au exact k divizori oi suma acestora (k se citeote de la tastatura).
// Restric?ii: .
// Exemplu: Pentru k=4 si numerele 12 , 6, 9, 15, 27, 16,0 se va afioa 6+15+27=48.

#include<fstream>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");

int a[100],n,k;

void citire()
{f>>k;
int x;
int i=0;
int aux=1;
while(f>>x && aux==1)
{if(x!=0)
{g<<x<<" ";
i++;
a[i]=x;
}
else aux=0;
}
n=i;
}

int nrdiv(int x)
{int nr=0;
for(int d=1;d<=x;d++)
if(x%d==0)
nr++;
return nr;
}

int main()
{
citire();
g<<endl;

int s=0;
int c=1;
for(int i=1;i<=n;i++)
{
if(nrdiv(a[i])==k && c!=1)
{g<<"+"<<a[i];
s=s+a[i];
}
if(nrdiv(a[i])==k && c==1)
{g<<a[i];
c=0;
s=s+a[i];
}
}
g<<"="<<s;
return 1;
}

    problema 2
Se citesc de la tastatură n numere naturale mai mici decât 100
 a)      Să se afişeze numerele citite;
b)Să se afişeze produsul cifrelor diferite de zero pentru fiecare număr citit 

#include<iostream.h>
int n, a[100];
int prod(int x)
{int p=1;
while(x)
{if(x%10!=0)
p=p*(x%10);
x=x/10;
}
return p;
}
int main()
{cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
cout<<a[i]<<" "<<prod(a[i])<<endl;
return 0;
}
   problema 3
Se citesc de la tastatură numerele naturale n (n000) şi b(2≤). 
 a)    Afişaţi transformatul numărul n din baza 10 în baza b;
b)Explicaţi algoritmul utilizat.  
#include<fstream>
#include<iostream>
using namespace std;
int n,b,m,r;
//varianta recursiva
void nr(int n,int b)
{
if(n!=0)
{
nr(n/b,b);
cout<<n%b;
}
}


//varianta nerecursiva
int nr2(int n,int b)
{
int f=1;
while(n)
{
r=n%b;
n=n/b;
m=m+r*f;
f=f*10;
}
return m;
}


int main()
{
cin>>n>>b;
nr(n,b);
cout<<nr2(n,b);
return 1;
}

   problema 4
 Scrieţi un program care determină toate numerele naturale perfecte mai mici decât un număr natural n citit de la tastatură. Un număr este perfect dacă este egal cu suma divizorilor strict mai mici decăt el.
#include<fstream.h>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");
int n;


int perfect(int x)
{ int S=0;
for(int d=1;d<=x/2;d++)
if(x%d==0)
S=S+d;


if(S==x)
return 1;
else
return 0;
}


int main()
{ f>>n;
g<<"nr perfect sunt ";
for(int i=1;i<n;i++)
if(perfect(i)==1)
g<<i<<" ";


return 0;
}
  problema 5
Dintr-un fişier text se citesc n numere naturale pozitive

a)      Afişaţi numerele citite;
b)      Afişaţi toate numerele care îndeplinesc condiţia ca oglinditul lor să fie un număr par.


#include<fstream>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");
int n;
int a[100];

void citire()
{
f>>n;

for(int i=1;i<=n;i++)
f>>a[i];

}

void afisare_numere()
{
for(int i=1;i<=n;i++)
g<<a[i]<<" ";
}

int oglindit_par(int x)
{

while(x>10)
{
x=x/10;
}

if(x%2==0)
return 1;
else
return 0;

}


void afisare_ogl()
{
for(int i=1;i<=n;i++)
{
if(oglindit_par(a[i]))

g<<a[i]<<" ";
}
}

int main()
{
citire();
afisare_numere();
g<<endl;
afisare_ogl();
return 1;
}

  problema 6
Se citeaşte din fişierul “date.in” un şir format din numere naturale de cel mult 3 cifre

a)      Eliminaţi din şir  numerele care se repetă.
b)      Afişaţi elementele şirului dat, în ordine crescătoare;

#include<fstream>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");
int a[10000];
int n;

void citire()
{ int i=0;
while(!f.eof())
{
i++;
f>>a[i];
}
n=i;
}

void afisare()
{
for(int i=1;i<=n;i++)
g<<a[i]<<" ";

}

void elimina()
{
for(int i=1;i<=n;i++)

for(int j=i+1;j<=n;j++)
if(a[i]==a[j])
{
for(int k=j+1;k<=n;k++)
a[k-1]=a[k];

n--;
}

}

void sortare()
{ int s=1;
do
{
s=1;
for(int i=1;i<=n-1;i++)
{
if( a[i]>a[i+1])
{
int aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
s=0;
}
}
}
while(s==0);
}

int main()
{
citire();
elimina();
sortare();
afisare();

return 1;
}



  problema 7
Pe prima linie a fişierului "date.in" se află n numere naturale nenule

a)      Afişaţi cel mai mare număr ce se poate forma din cifrele distincte ale elementului minim din şir;
      b)  Ordonaţi crescător elementele şirului în funcţie de numărul de cifre pare a fiecăruia

#include<fstream.h>
ifstream f("date.in");
ofstream g("date.out");


int minim()
{ int min=a[i];
for(i=2;i<=n;i++)
if(a[i]<min)
min=a[i];
return min;
}

void sortare1()
{int S=1;int aux;
do{S=1;
for(j=1;j<=n;j++)
if(v[j]<v[j+1])
{aux=v[j];
v[j]=v[j+1];
v[j+1]=aux;
S=0;
}
}while(S==0);
}

int pcta()
{int x=nrmin();intv[100];inti=0;
while(x)
{i++;
v[i]=x%10;
x=x/10;
}
for(j=1;j<=i;j++)
for(k=j+1;k<=i;k++)
{if(v[j]==v[k])
for(q=k;q<i;q++)
{v[k]=v[k+1];
i--;
}
sortare1();
int nrmax;
for(j=1;j<=i;j++)
nrmax=nrmax*10+v[j];
return nrmax;
}
int nrcfpar(int x)
{int y=x;int par=0;
while(x)
{if(x%2==0)
par++;
x=x/10;
}
return par;
}

void sortare2()
{int S=1;int aux;int aux2;
do{S=1;
for(i=1;i<=n;i++)
if(a[i]>a[i+1])
{aux=a[i];
aux2=a2[i];
a[i]=a[i+1]
a2[i]=a2[i+1];
a[i+1]=aux];
a2[i+1]=aux2;
s=0;
}
}while(s==0);
}

void pctb()
{int a2[100];
for(i=1;i<=n;i++)
a2[i]=nrcfpar(a[i]);
sortare2();
}
int main()
{int n,a[100];
f>>n;
for(i=1;i<=b;i++)
f>>a[i];
g<<pcta();
pctb();
for(i=1;i<=n;i++)
g<<a[i];
return 0;
}   
  problema 8

1.Scrieţi un algoritm eficient de generare a primele n numere prime, n citit de la tastatură.
a)      Să se afişeze şirul generat;
b)      Explicaţi algoritmul utilizat.
#include<fstream>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");

int n,i,j,q,p;

int prim(int x)
{
for(int d=2;d<=double(sqrt(double(x)));d++)
if(x%d==0)
return 0;
return 1;
}

int main()
{
f>>n;
q=2;i=2;j=3;
g<<q<<" ";
while(i<=n)
if(prim(j)==1)
{
g<<j<<" ";
i++;
j=j+2;
}
else
j=j+2;

return 1;
}
 


problema 9
 .Să se scrie un număr natural n citit de la tastatură ca sumă de trei numere naturale prime în ordine crescătoare în fişierul prime.txt. 1 nu e considerat număr prim.

#include<iostream.h>
#include<fstream.h>
ofstream g("prime.text");
int n;
int prim (int x)
{if(x==1)
return 0;
if(x==2)
return 1;
for(int d=2;d*d<=x;d++)
if(x%d==0)
return 0;
return 1;
}
int main()
{cout<<"dati n";
cin>>n;
for(int i=2;i<=n/3;i++)
{if(prim(i))
for(int j=i+1;j<=(n-i)/2;j++)
if(prim(j) && prim(n-i-j))
{g<<n<<"="<<i<<"+"<<j<<"+"<<n-i-j;
j=n;
i=n;
}
}
return 0;
}
problema 10

Determinaţi şi afişaţi pentru fiecare numar :
a) baza minimă în care cifrele respective pot reprezenta un număr.
b) valoarea obţinută după conversia numărului in baza 10.

   int v[100];
int main()
{f>>n;
 for(int i=1,n);
f>>v[i];
for(i=1, n);
g<<bmin(v[i])<<" ";
for(i=1,n)
val(v[i],bmin(v[i]));
return 0;
}
int bmin(int x)
{int max=x%10;
x=x/10;
while(x)
{if(x%10>max)
max=x%10;
x=x/10;
if(max!=0)
return max+1;
else return 2;
}
void val(int a, int b)
{int f=1, rez=0;
while(a)
{rez=rez+(a%10)*f;
a=a/10;
f=f*b;}
g<<rez<<" ";
}

 problema 11
Din fisierul mat.in” se citeşte n(dimensiunea,n≤10) şi apoi liniile.

a)      afişaţi matricea:
b)      afişaţi suma elementelor de pe diagonala principală şi produsul elementelor de pe diagonala secundară.
  #include<fstream>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");

int a[10][10],i,j,n;

int main()
{
int s=0,p=1;
f>>n;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
f>>a[i][j];
g<<a[i][j]<<" ";
}
g<<endl;
s=s+a[i][i];
p=p*a[i][n-i+1];
}

g<<s<<" "<<p;
return 1;
}



     problema 12
Din fisierul mat.in” se citeşte n(dimensiunea,n≤10) şi apoi liniile

a)      afişaţi matricea;
      b)   afişaţi cel mai mare divizor comun al fiecărei linii  
#include<fstream.h>
ifstream f("mat.in");
ofstream g("date.out");
using namespace std;
int a[100][100],n;
void citire()
{
f>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
f>>a[i][j];
g<<a[i][j]<<" ";
}
g<<endl;
}
}
int cmmdc(int a, int b)
{
while(b)
{
int r=a%b;
a=b;
b=r;
}
return a;
}
int fct(int i)
{
int d=a[i][1];
for(int j=2;j<=n;j++)
d=cmmdc(a[i][j],d);
return d;
}
int main()
{
citire();
for(int i=1;i<=n;i++)
g<<" "<<fct(i);
 
  problema 13
 Pe prima linie a fişierului "date.in" se află n numere naturale nenule (0<n<100),
Fiecare număr având cel mult 4 cifre 

a)      Să se formeze şi afişeze un număr din prima cifră a fiecărui element al şirului;
b)      să se afişeze pe ecran „Da”, dacă numărul format este palindrom, sau „Nu” în caz contrar.
 #include<fstream>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");

int n;
int a[100];

int pcta()
{int nr;
for(int i=1;i<=n;i++)
{ int x=a[i];
while(x>10)
x=x/10;
nr=nr*10+x;
}
return nr;
}

void pctb(int x)
{int y=x;
int pal=0;
while(y)
{pal=pal*10+y%10;
y=y/10;
}
if(pal==x)
g<<" DA ";
else
g<<" NU ";
}

int main()
{f>>n;
for(int i=1;i<=n;i++)
f>>a[i];

g<<pcta();
pctb(pcta());
}

   problema 15
 Să se citească de la tastatură două şiruri de caractere s1 si s2, fiecare având maxim 50 caractere.

a.       Verificaţi dacă şirurile s1 şi s2 au proprietatea de mulţime;
                  b.   Afişaţi intersecţia, diferenta şi reuniunea celor două cuvinte     
#include<fstream>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");
char s1[49], s2[49];
int multime(char s[100])
{ for(int i=0;i<strlen(s)-1;i++)
for(int j=i+1;j<strlen(s);j++)
if(s[i]==s[j])
return 0;
return 1;
}
int caut(char elem, char s[100],int n)
{ for(int i=0;i<n;i++)
if(elem==s[i])
return 1;
return 0;
}
void intersectie()
{
for(int i=0;i<strlen(s1);i++)
if(caut(s1[i],s2,strlen(s2))&&!caut(s1[i],s1,i))
g<<s1[i];


}


void diferenta(char s[100],char sd[100])
{ for(int i=0;i<strlen(s);i++)
if(!caut(s[i],sd,strlen(sd))&&!caut(s[i],s,i))
g<<s[i];
}
void reuniune()
{
intersectie();
diferenta(s1,s2);
diferenta(s2,s1);}
int main()
{f.get(s1,49);
f.get();
f.get(s2,49);


if(multime(s1)==1) g<<"da";
else g<<"nu";
g<<endl;
if(multime(s2)==1) g<<"da";
else g<<"nu";
g<<endl;
g<<"intersectie"<<" ";
intersectie();
g<<endl;
g<<"diferenta s1-s2 ";
diferenta(s1,s2);
g<<endl;

g<<"diferenta s2-s1 ";
diferenta(s2,s1);
g<<endl;
g<<"reuniune ";
reuniune();
}
   
problema 17
 Se citeşte un text de la tastatură. Să se insereze după fiecare vocală codul ASCII corespunzător acesteia. Afişaţi textul modificat.
#include<iostream>
#include<string>
using namespace std;
char s[100],v[]="aeiou";
int i;


int main()
{
cin.get(s,100);
for(i=0;i<strlen(s);i++)
if(strchr(v,s[i]))
cout<<s[i]<<int(s[i]);
else
cout<<s[i];
return 1;
}
  problema 18
   Se citeşte un text de la tastatură. Să se înlocuiască fiecare vocală cu caracterul ‘*’.

     Afişaţi textul modificat.
 #include<iostream>
#include<fstream>
#include<string>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");
char s[100],v[]="aeiou";
int i;
int main()
{f.get(s,100);
for(i=0;i<=strlen(s)-1;i++)
g<<s[i];
g<<endl;
for(i=0;i<strlen(s);i++)
if(strchr(v,s[i]))
s[i]='*';
for(i=0;i<strlen(s);i++)
g<<s[i];
return 1;
}

     
problema 19
  Într-un fişier text sunt păstrate informaţii despre elevii unei clase. Pe primul rând este înregistrat numărul n de elevi din clasă. De pe următoarele n linii se vor citi pentru  fiecare elev: numele şi CNP-ul. Să se afişeze numele şi sexul celui mai mic elev din clasă. Dacă sunt mai mulţi elevi cu aceeaşi vârstă minimă, se vor afişa toţi elevii respectivi.

#include<fstream>
#include<string>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");


struct elev
{
char m[3][20];


};


elev v[100];


void varsta(elev &i)
{


char s[100];
strcpy(s,(i.m)[2]);
strcpy(s,s+1);
s[6]='\0';
strcpy((i.m)[3],strrev(s));
}


int n,i,j,poz;
int main()
{
f>>n;
f.get();
for(i=1;i<=n;i++)
f>>(v[i].m)[1]>>(v[i].m)[2];


g<<"**************"<<endl;
for(i=1;i<=n;i++)
varsta(v[i]);


for(i=1;i<=n;i++)
g<<(v[i].m)[1]<<" "<<(v[i].m)[2]<<" "<<(v[i].m)[3]<<endl;


char min[20];
strcpy(min,(v[1].m)[3]);
for(j=2;j<=n;j++)
if(strcmp((v[j].m)[3],min)<0)
{
strcpy(min,(v[j].m)[3]);
poz=j;
}


for(i=1;i<=n;i++)
if(strcmp(min,(v[i].m)[3])==0)
{
g<<(v[i].m)[1]<<" este ";
if((v[i].m)[2][0]=='1')
g<<" baiat";
else
g<<" fata";
}
return 1;
}
  problema 20
 . Se citeşte un text de la tastatură. Cuvintele se consideră separate prin spaţiu, virgulă sau punct şi virgulă.

a)      Afişaţi câte cuvinte  conţine textul
b)      Afişaţi cuvintele palindrom.

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");


char s[100],q[10];
int nr,n,i,j;
int main()
{
cin.get(s,100);
char *p=strtok(s," ,;");
cout<<"cuvinte palindrom ";
while(p)
{
strcpy(q,p);
nr++;
if(strcmp(strrev(q),p)==0)
cout<<p<<" ";
p=strtok(NULL," ,;");
}


cout<<endl;
cout<<nr<<" cuvinte";
return 1;
}

problema 33

#include<iostream>
#include<fstream>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");
int a[10][10],viz[10],cost[10],t[10],n,m,x,y,z,i,j,k,v;
long Max=1000000;
void citire()
{
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=Max;
//a[i][i]=0;

for(i=1;i<=m;i++)
{
f>>x>>y>>z;
a[x][y]=a[y][x]=z;
}



f>>v;
viz[v]=1;
for(int i=1;i<=n;i++)
{
cost[i]=a[v][i];
if(cost[i]<Max)
t[i]=v;
}

}



void dijkstra()
{
long min;
for(int z=1;z<=n-1;z++)
{
min=Max;
for(k=1;k<=n;k++)
if(viz[k]==0)

if(min>cost[k])
{
min=cost[k];
i=k;
}
viz[i]=1;
for(int j=1;j<=n;j++)
if(viz[j]==0)
if(cost[j]>cost[i]+a[i][j])
{
cost[j]=cost[i]+a[i][j];
t[j]=i;
}

}
}



void drum(int i)
{
if(t[i])
drum(t[i]);
g<<i<<" ";
}

int main()
{
citire();
dijkstra();
for(i=1;i<=n;i++)
if(i!=v)
{
g<<"drumul de la "<<v<<" la "<<i<<" de cost min "<<cost[i]<<" trece prin ";
drum(i);
g<<endl;
}

return 1;
}


 problema 7(andreea,fara sortare,pct b)...aia o faceti voi)
Pe prima linie a fişierului "date.in" se află n numere naturale nenule

a)      Afişaţi cel mai mare număr ce se poate forma din cifrele distincte ale elementului minim din şir;
      b)  Ordonaţi crescător elementele şirului în funcţie de numărul de cifre pare a fiecăruia
 #include<fstream>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");

int v[100],a[11],n,m,i,j,k,q;

int minim()
{
int mn=v[1];
for(i=2;i<=n;i++)
if(v[i]<mn)
mn=v[i];
return mn;
}


void nrmax()
{
int p=minim();
while(p)
{
a[p%10]++;
p=p/10;
}
for(i=9;i>=0;i--)
if(a[i])
g<<i;

}

int main()
{
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
nrmax();
return 1;
}