Sunteți pe pagina 1din 10

Probleme rezolvate C++

1.Scriei un program C/C++ care citete de la tastatura un numr natural n (2<n<21) si apoi n linii cu
cate n numere ntregi de cel mult 7 cifre ce formeaz un tablou bidimensional a. Sa se afieze pe
ecran diferena dintre suma elementelor de pe diagonala principala si suma elementelor de pe
diagonala secundara a matricei a.
#include<iostream.h>
void main()
{int n,i,j;
long a[20][20],s1=0,s2=0,d;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
{cout<<"a["<<i<<"]["<<j<<"]=";cin>>a[i][j];}}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
if(i==j)
s1=s1+a[i][j];};
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
if(i+j==n+1)
s2=s2+a[i][j];}
cout<<s1-s2;
}
3.Scriei programul C/C++ care citete de la tastatura un numr natural n (n<100) si un sir cu n
numere ntregi din intervalul [100 ;999] ; programul construiete un sir de numere rezultat prin
nlocuirea fiecrui numr din irul citit cu numrul obinut prin interschimbarea cifrei unitatilor cu cifra
sutelor. Numerele din noul sir se vor afia pe ecran separate printr-un singur spaiu. De exemplu ,
pentru n=3 si irul 123 , 904 , 500 , se afieaz 321 , 409 , 5.
#include<iostream.h>
void main()
{int n,i,o,v[20],c;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{cout<<"v["<<i<<"]=";cin>>v[i];}
for(i=1;i<=n;i++)
{o=0;
c=v[i]%10;
o=o*10+c;
v[i]=v[i]/10;
c=v[i]%10;
o=o*10+c;
v[i]=v[i]/10;
o=o*10+v[i];
v[i]=o;
cout<<v[i]<<endl;
}
}
4.Doua tablouri unidimensionale a si b , cu elementele a1 , a2 , , an , respectiv b1 , b2 , bn sunt
in relaia a<=b daca : a1<=b1 , a2<=b2 , , an<=bn. Scriei program in limbajul C/C++ care citete
doua tablouri unidimensionale a si b cu acelai numr de elemente de tip ntreg si verifica daca a<=b
sau b<=a afind un mesaj adecvat.

#include<iostream.h>
void main()
{int a[10],i,n,j,k,aux,min;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";cin>>a[i];}
for(i=1;i<=n-1;i++)
{min=a[i];
k=i;
for(j=i+1;j<=n;j++)
if(a[j]<min)
{min=a[j];
k=j;}
aux=a[k];
a[k]=a[i];
a[i]=aux;}
for(i=1;i<=n;i++)
cout<<a[i]<<" ";}
8.Scriei un program in limbajul C/C++ care afieaz toate numerele naturale formate din cifre identice
, mai mari dect 10 si mai mici dect o valoare data n, n<=2.000.000. De exemplu pentru n=195 , se
afieaz : 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 111.
#include<iostream.h>
int n,i;
int identic(int n)
{int d,c;
c=n%10;
while (n>0)
{d=n%10;
if(d==c)
n=n/10;
else
return 0;}
if(n==0)
return 1;}
void main()
{cout<<"n=";cin>>n;
for (i=10;i<=n;i++)
{if(identic(i))
cout<<i<<endl;}}
10.Scriei un program C/C++ care citete de la tastatura trei numere naturale x, y si k,
(1<x<y<2000000, k<1000) si afieaz pe ecran k numere prime din intervalul [x, y]. Daca nu exista k
numere prime n intervalul [x,y] se vor afia toate numerele prime gsite iar pe linia urmtoare se va
afia mesajul s-au gsit mai puine numere prime: urmat de numrul acestora. De exemplu, pentru
x=3, y=12 si k=5 se vor afia pe ecran:
3 5 7 11
s-au gsit mai puine numere prime:4
#include<iostream.h>
void main()
{int x,y,k,n,d,a,p;
cout<<"x=";cin>>x;
cout<<"y=";cin>>y;
cout<<"k=";cin>>k;
a=0;
n=x;
while ((n>=x)&&(n<=y)&&(a<k) )
{d=2;p=1;

while((d<=n/2)&&(p==1))
if(n%d==0)
p=0;
else
d++;
if(p)
{cout<<n<<endl;a++;}
n++;}
if(a<k)
cout<<"au fost gasite mai putine nr prime"<<a;}
12.Scriei un program C/C++ care citete din fiierul text BAC.TXT , cel mult 100 de numere naturale
aflate pe o singura linie, formate din cel mult 9 cifre fiecare, separate prin spatii si dintre acestea le
afieaz pe ecran doar pe acelea care au proprietatea de a fi palindrom. Daca nu se gsesc numere
palindrom, se va afia pe ecran valoarea 1. Un numr are proprietatea de a fi palindrom daca citit de
la dreapta la stnga sau de la stnga la dreapta are aceeai valoare. De exemplu 1221 este
palindrom, in timp ce 1210 nu este palindrom.
Exemplu : daca din fiierul BAC.TXT se citesc numerele : 7341 , 8228 , 660 , 2 , 80 , 131 , atunci pe
ecran se vor afia : 828 , 2 , 131.
#include<iostream.h>
int palindrom(int n)
{int copie=n,oglindit,c;
oglindit=0;
{while(n!=0)
c=n%10;
oglindit=oglindit*10+c;
n=n/10;}
return (copie==oglindit);}
void main()
{int v[100],n,i,p;
p=0;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{cout<<"v["<<i<<"]=";cin>>v[i];}
for(i=1;i<=n;i++)
if(palindrom(v[i]))
{cout<<v[i];
p=1;}
if(p==0)
cout<<"-1";}
14.Pentru orice numr natural nenul n definim n factorial (notat n!) ca fiind produsul tuturor numerelor
naturale nenule mai mici sau egale cu n (n! = 1*2*3**n) De exemplu : 3!=1*2*3=6 5!=1*2*3*4*5=120
. Scriei un program C/C++ care determina numrul de cifre nule aflate pe ultimele poziii consecutive
ale valorii obinute in urma evalurii lui n!, n fiind un numr natural de cel mult 4 cifre. De exemplu
daca n=10, n!=3628800 rezultatul va fi 2 deoarece 3628800 are dou zerouri la sfrit.
#include<iostream.h>
void main()
{long int n,x=1,nr=0,c,p=1;
cout<<"n=";cin>>n;
for(int i=1;i<=n;i++)
p=p*i;
while(x==1)
{c=p%10;
if(c==0)

{nr=nr+1;
p=p/10;}
else
x=0;}
cout<<nr;}
15.Scriei un program C/C++ care citete din fiierul text DATE.IN cel mult 100 de numere naturale
nenule aflate pe o singura linie, formate din cel mult 4 cifre fiecare, separate prin spatii si scrie in
fiierul DATE.OUT numerele, in ordinea inversa fata de cea in care au fost citite, pe o singura linie
separate prin spatii. De exemplu daca din fiierul DATE.IN se citesc numerele 93 207 15 1982 3762,
atunci coninutul fiierului DATE.OUT va fi 3762 1982 15 207 93.
#include<fstream.h>
void main()
{int n,i,v[100];
fstream f("date.in",ios::in);
fstream g("date.out",ios::out);
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
for(i=n;i>0;i--)
g<<v[i];
f.close();
g.close();}
17.Scriei un program C/C++ care citete de pe prima linie a fiierului text BAC.TXT trei numere
naturale a, b, c formate din cel mult patru cifre fiecare, separate prin cate un spaiu si afieaz pe
ecran cel mai mare divizor comun al acestora. De exemplu, daca din fiier se citesc numerele : 9 27
15, atunci se afieaz 3.
#include<iostream.h>
int cmmdc (int x,int y)
{while (x!=y)
if(x>y)
else
y=y-x;
return x;}
void main()
{int a,b,c,d;
fstream("bac.txt";ios::in);
f>>a>>b>>c;
f.close;
d=cmmdc(a,b);
cout<<cmmdc(c,d);}
19.Scriei un program care verifica daca un numr natural k(1<k<100000) citit de la tastatura este
prim. Programul va afia pe ecran mesajul DA sau mesajul NU;
#include<iostream.h>
int prim(int n)
{int prim=1;
for(int d=2;d<=n/2;d++)
if(n%d==0)
prim=0;
if(prim)
return 1;
else
return 0;}
void main()

{int n;
cout<<"n=";cin>>n;
if(prim(n))
cout<<"da";
else
cout<<"nu";}
21.Se considera fiierul text date.in care conine exact 19 numere distincte formate fiecare din maxim
2 cifre. Sa se afieze in fiierul text date.out numrul care lipsete din fiierul date.in.
#include<fstream.h>
void main()
{int v[100],n,i,j,p;
fstream f("date.in",ios::in);
fstream g("date.out",ios::out);
for(i=1;i<=19;i++)
f>>v[i];
f.close();
for(i=10;i<=99;i++)
{p=1;
for(j=1;j<=19;j++)
if(i==v[j])
p=0;
if(p)
g<<i;}
g.close();}
22.Se citete de la tastatura un numr natural nenul n (n<1000). Scriei un program C/C++ care
construiete fiierul text bac.txt care sa contina, pe prima linie, toi divizorii lui n in ordine strict
descresctoare. Divizorii vor fi separai prin spaiu. De exemplu, daca n=10 , atunci fiierul bac.txt va
conine : 10 , 5 , 2 , 1
#include<iostream.h>
#include<fstream.h>
void main()
{int d,n;
cout<<"n=";cin>>n;
fstream g("bac1.txt",ios::out);
for(d=n;d>=1;d--)
if(n%d==0)
g<<d<<" ";
g.close();}
25.Se citete de la tastatura un numr natural nenul n care are cel mult 9 cifre. Sa se afieze in fiierul
Date.out numrul k, natural, astfel nct produsul 1*2**(k-1)*k sa aib o valoare cat mai apropiata
de numrul n. De exemplu, daca se citete numrul n=25 fiierul Date.out are urmtorul coninut: 4.
iar daca se citete numrul n=119 fiierul Date.out are urmtorul coninut: 5
#include<iostream.h>
#include<fstream.h>
void main()
{int k,p,r,n;
cout<<"n=";cin>>n;
k=1;
fstream g("date.out",ios::out);
p=1;
while(p<=n)
{p=p*k;

k++;}
p=p/(k-1);
r=p*k;
if((n-p)<=(r-n))
g<<"numarul k este "<<k-2;
else
g<<"numalul k este "<<k-1;
g.close();
}
27.Scriei un program care citete un numr natural n>1 cu maximum 9 cifre, si afieaz valoarea
celui mai mic divizor prim a lui n, precum si puterea la care acest divizor apare in descompunerea in
factori primi a numrului n.
#include<iostream.h>
int n,p,c;
void cmmd(int n)
{int gasit=0,d=2;
while((d<n/2)&&(gasit==0))
{if(n%d==0)
{c=d;
gasit=1;}
else
d++;}
p=0;
while(n%c==0)
{n=n/c;
p=p+1;}}
void main()
{cout<<"n=";cin>>n;
cmmd(n);
cout<<c<<" la puterea "<<p;
}
28.S se scrie un program care s calculeze i s afieze pe ecran produsul cifrelor pare i suma
cifrelor impare a unui numr natural n citit de la tastatur.
#include<iostream.h>
unsigned int n, s, p=1, c;
void main()
{
cin>>n;
while(n)
{
c=n%10;
if(c%2==0)
p=p*c;
else
s=s+c;
n=n/10;
}
cout<< p <<" "<< s;
}
29.Sa se verifice daca doua cuvinte introduse de la tastatura (cuvintele avnd maxim 50 de caractere
fiecare) sunt rime, adic ultimele p caractere ale celor doua cuvinte coincid, unde p (2<=p<=10) este
dat.

#include<iostream.h>
#include<string.h>
char s1[51], s2[51];
int p, x, y, ok=0;
void main()
{
cin>> s1>>s2>>p;
x=strlen(s1)-1;
y= strlen(s2)-1;
for( int i=1;i<=p && ok==0 ;i++)
{
if(s1[x]!=s2[y])
ok=1;
x--;
y--;
}
if(ok)
cout<<"Nu sunt rime";
else
cout<<"Sunt rime";
}
30.Scriei un program care construiete o matrice ptrat de ordin n format din valorile 1 si 2 astfel
nct elementele de pe diagonala principala si secundar sa fie egale cu 1 iar restul elementelor cu 2.
Valoarea lui n se citete de la tastatur: n numr natural (2<23), iar matricea se va afia pe ecran,
cate o linie a matricei pe fiecare rnd pe ecran cu spatii intre elementele fiecrei linii.
Exemplu: Fie n=5. Se va afia:
12221
21212
22122
21212
12221
#include<iostream.h>
int a[10][10], i, j, n;
void main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j || i+j==n+1)
a[i][j]=1;
else
a[i][j]=2;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<< a[i][j];
cout<< endl;
}
}
31.Scriei un program care citete de la tastatur un sir de cel mult 50 de caractere si construiete
fiierul atestat.txt ce conine irul si prefixele acestuia de lungime cel puin 1, fiecare pe cate o linie, in
ordinea descresctoare a lungimii prefixelor.
Exemplu: Daca se citete irul proba atunci atestat.txt va conine:

proba
prob
pro
pr
p
#include<fstream.h>
#include<string.h>
char s[51];
int n;
void main()
{
cin>>s;
ofstream f("atestat.txt");
n=strlen(s);
while(n>=0)
{
for(int i=0; i< n; i++)
f << s[i];
f<< endl;
n--;
}
f.close();
}
32.S se scrie un program care s numere cuvintele dintr-un text citit din fiierul cuvinte.txt. Textul
conine cuvintele separate numai printr-un spaiu, fr semne de punctuaie, singurul semn de
punctuaie este . de la sfritul textului. Numrul de cuvinte se va afia pe ecran.
Exemplu: Fiierul cuvinte.txt conine textul: Ana are mere. se afieaz: 3
#include<fstream.h>
#include<string.h>
void main()
{
ifstream f("cuvinte.txt");
char s[100];
int k=1,n;
f.getline(s,100);n=strlen(s);
for(int i=0;i< n;i++)
if(s[i]==' '&& s[i+1]!=' ')
k++;
cout<< k;
f.close();
}
33.Scriei programul care citete de la tastatur o valoare natural n (2n100), construiete in
memorie si apoi afieaz pe ecran o matrice a cu n linii si n coloane, numerotate de la 1 la n, car
conine numerele naturale, in ordine cresctoare, de la 1 la n2, dispuse pe coloane, in ordine
cresctoare. Astfel coloana 1 va conine numerele de la 1 la n, coloana 2 numerele de la n+1 la 2*n,
coloana 3 de la 2*n+1 la 3*n si aa mai departe, ca in exemplu. Matricea se va afia pe ecran, cate o
linie a matricei pe cate o linie a ecranului, elementele fiecrei linii fiind separate intre ele prin cate un
spaiu.
Exemplu: pentru n = 4 se va afia matricea:
1 5 9 13
2 6 10 14

3 7 11 15
4 8 12 16
#include<iostream.h>
int a[10][10], k=1,s,n;
void main()
{
cout<<"n=";
cin>>n;
for(int j=1;j<=n;j++)
for(int i=1;i<=n;i++)
{
a[i][j]=k;
k++;
}
for(int i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<< a[i][j]<<" ";
cout<< endl;
}
}
34.Se d n numr natural. S se afieze cel mai apropiat numr prim fat de n. Programul va conine
cel puin un subprogram.
Exemplu: n=24 se va afia 23, pentru n=26 se va afia 29
#include<iostream.h>
int prim(int x)
{
if(x==0 || x==1) return 0;
for(int i=2;i<=x/2;i++)
if(x%i==0)
return 0;
return 1;
}
void main()
{
unsigned n, x, y;
cout<< "n=";
cin>>n;
x=n+1;
y=n-1;
while(prim(x)==0) x++;
while(prim(y)==0) y--;
if(x-n>n-y)
cout<< y;
else
cout<< x;
}
35.Se considera un vector cu n (1< n<100) componente numere naturale. Sa se determine
componentele vectorului cu cei mai muli divizori. Se va folosi un subprogram pentru citirea vectorului
si unul pentru calculul numrului de divizori ai unui numr.
#include<iostream.h>
int n, a[100];
void citire ()

{ int i;
for(i=1;i<=n;i++)
cin>>a[i];
}
int div(int x)
{ int i, nr=0;
for(i=2;i<=x;i++)
if(x%i==0) nr++;
return nr;
}
void main()
{ int i,max=0;
cin>>n;
citire();
for(i=1;i<=n;i++)
if(div(a[i])>max)
max=div(a[i]);
for(i=1;i<=n;i++)
if(div(a[i])==max)
cout<< a[i]<<" ";
}
36.Se consider un ir de n numere ntregi. S se verifice dac o valoare x, citit de la tastatur,
apare sau nu n vector. n caz c se afl printre valorile din vector se va preciza i n ce poziie apare.
n caz contrar se va afia mesajul NU.
#include<iostream.h>
void main()
{ int n, v[100], i, x, p=0;
cin>>n>>x;
for(i=1;i<=n;i++)
{ cin>>v[i];
if(v[i]==x)p=i;
}
if(p==0) cout<<"nu";
else
cout<< "Valoarea "<< x<< "apare in pozitia "<< p;
}

S-ar putea să vă placă și