Sunteți pe pagina 1din 29

Problema 1

S se scrie un program care s numere i s afieze


perechile de numere naturale care nu depesc un numr
natural n i care au cel mai mare divizor comun numrul
d dat.
Ex. Pentru n=20 i d=5 rezultatul va fi afiat pe ecran sub forma :
Perechile sunt : (5,5), (5,10), (5,15), (5,20), (10,15), (15, 20).
Numrul perechilor este 6
#include<iostream.h>
#include<conio.h>
int n,d,nr=0;
int cmmdc(int a,int b)
{while(a!=b) if(a>b) a-=b;
else b-=a;
return a;}
int numarare()
{int x,y;
for(x=d;x<=n;x++)
for(y=x;y<=n;y++)
if(cmmdc(x,y)==d){nr++;
cout<<(<<x<<,<<y<<);}
cout<<endl;
cout<<numerul de perechi este ;
return nr;}
void main()
{clrscr();
cout<<n= ;cin>>n;
cout<<d=;cin>>d;
cout<<numarare();
getch();}
Problema 2
Cte cifre comune au dou numere cu maxim 9 cifre
fiecare, citite de la tastatur ? Afiai care sunt aceste
cifre.
Ex. Numerele 21343 i 14513 au 3 cifre comune i anume 1, 3, 4.
Daca numerele nu au cifre comune se va afisa : Numerele nu au cifre comune.
#include<iostream.h>
#include<conio.h>
long x,y;
int c,nr=0;
int cifra(int x,int c)
{while(x) {if(x%10==c) return 1;
x/=10;}
return 0;}
void main()
{clrscr();
cout<<x= ;cin>>x;
cout<<y= ;cin>>y;
for(c=0;c<=9;c++)
if(cifra(x,c)&&cifra(y,c)){cout<<c<< ;
nr++;}
cout<<endl;
if(nr==0) cout<<numerele nu au cifre comune.;
else cout<<nr<< cifre comune.;
getch();}
Problema 3
S se afieze i s se numere cate din elementele unui
vector dat de numere naturale (mai mici sau egale cu
30000) sunt numere Fibonacci.
Ex. Dac se citeste vectorul x=(5, 10, 1, 7, 9, 8, 1, 6, 55, 19) se va afia:
Sunt 5 numere Fibonacci : 5 1 8 1 55
#include<iostream.h>
#include<conio.h>
int b,f,t,nr=0,n,v[20];
void main()
{clrscr();
int i;
cout<<n= ;cin>>n;
for(i=1;i<=n;i++)
{cout<<v[<<i<<]=;cin>>v[i];}
cout<<numele sunt ;
for(i=1;i<=n;i++)
if(v[i]==1) {cout<<v[i]<< ;nr++;}
else{b=t=1;f=b+t;
while(f<v[i]) {b=t;t=f;f=b+t;}
if(v[i]==f) {cout<<v[i]<< ;nr++;} }
cout<<endl;
cout<<nr= <<nr;
getch();}
Problema 4
Se d un vector cu n elemente numere reale (n<=30) S
se insereze ntre oricare dou elemente alturate media lor
aritmetica (far a folosi alt vector).
#include<iostream.h>
#include<conio.h>
int n;
float ma,v[20];
void citire()
{int i;
cout<<n= ;cin>>n;
for(i=1;i<=n;i++)
{cout<<v[<<i<<]=;cin>>v[i];}
cout<<endl;}
void afis()
{int i;
for(i=1;i<=n;i++)
cout<<v[i]<< ;
cout<<endl;}
void main()
{clrscr();
int i,j;
citire();
afis();
for(i=1;i<n;i+=2)
{ma=(v[i]+v[i+1])/2;
for(j=n;j>=i+1;j)
v[j+1]=v[j];
v[i+1]=ma;
n++; }
afis();
cout<<endl;
getch();}
Problema 5
Se citete de la tastatur un tablou unidimensional cu n
elemente numere ntregi. S se afieze elementul care
apare de cele mai multe ori n tablou. Dac exist mai
multe astfel de elemente , se vor afia toate.
Ex. Pentru n=8 i elementele (23, 7, 11, 7, 19, 7, 11, 11) se va afia rezultatul sub
forma :
Elementul 7 care apare de 3 ori.
Elementul 11 care apare de 3 ori
#include<iostream.h>
#include<conio.h>
int n,v[20],x[20];
void citire()
{int i;
cout<<n= ;cin>>n;
for(i=1;i<=n;i++)
{cout<<v[<<i<<]=;cin>>v[i];}}
void main()
{clrscr();
int i,j,max;
citire();
for(i=1;i<=n;i++)
{x[i]=0;
for(j=i;j<=n;j++)
if(v[i]==v[j]) x[i]++; }
max=x[1];
for(i=2;i<=n;i++)
if(x[i]>max) max=x[i];
for(i=1;i<=n;i++)
if(x[i]==max) cout<<elementul <<v[i]<< <<apare de <<max<< ori<<endl;}
Problema 6
Se citesc de la tastatur doi vectori cu elemente numere
ntregi de dimensiuni n, respectiv m. S se numere cte
elemente din al doilea vector sunt strict mai mici dect
toate elementele din primul vector. Dac nu exista nici un
element cu proprietatea dat se va afia mesajul : Nici o
solutie.
#include<iostream.h>
#include<conio.h>
int nr,min,i,n,m,a[20],b[20];
void main()
{clrscr();
cout<<n= ;cin>>n;
cout<<m= ;cin>>m;
for(i=1;i<=n;i++)
{cout<<a[<<i<<]=;cin>>a[i];}
for(i=1;i<=m;i++)
{cout<<b[<<i<<]=;cin>>b[i];}
min=b[1];
for(i=1;i<=m;i++)
if(b[i]<min) min=b[i];
nr=0;
for(i=1;i<=n;i++)
if(a[i]<min) nr++;
cout<<nr= <<nr;
getch();}
Problema 7
S se scrie un program care determin toate reprezentrile
posibile ale unui numr natural ca sum de numere
naturale consecutive .
Ex. Pentru n=50 se va afisa:
50=8+9+10+11+12
50= 11+12+13+14.
Se va afisa: Nu exist soluii dac problema nu are soluii.
#include<iostream.h>
#include<conio.h>
int nr=0,n,i,x,y,s;
void main()
{clrscr();
cout<<n= ;cin>>n;
for(i=1;i<=n/2;i++)
{s=0;x=i;
while(s<n) {s=s+x; x=x+1;}
if(n==s) {nr++;
cout<<i;
for(y=i+1;y<=x-1;y++)
cout<<+<<y;
cout<<endl; } }
if(nr==0) cout<<nici o solutie;
getch();}
Problema 8
S se verifice dac dou numere naturale date sunt
termeni consecutivi ai irului Fibonacci.
Ex. Dac se citesc numerele 55 si 89 se va afia:
Sunt termeni consecutivi n irul Fibonacci.
Dac nu sunt se va afia un mesaj corespunzator.
#include<iostream.h>
#include<conio.h>
int a,b,aux,s,t,f;
void main()
{clrscr();
cout<<a= ;cin>>a;
cout<<b= ;cin>>b;
if(a>b) {aux=a;a=b;b=aux;}
s=t=1;
f=s+t;
while(f<b)
{s=t;t=f;f=s+t;}
if(f>b) cout<<NU sunt termeni consecutivi ai sirului Fibonaci;
else if(t==a) cout<<DA sunt termeni consecutivi ai sirului Fibonaci;}
Problema 9
Se numesc numere superprime, acele numere ale cror
prefixe sunt tot numere prime. S se verifice dac un
numr este superprim i s se afieze prefixele
numrului dat.
Ex: Dac se citete nr. 239 rezultatul va fi afiat sub forma:
239 este superprim
Prefixele sunt : 2, 23 i 239
#include<iostream.h>
#include<conio.h>
int n;
int prim(int x)
{if(x<2) return 0;
for(int d=2;d<=x/2;d++)
if(x%d==0) return 0;
return 1;}
int superprim(int x)
{while (x) {if(!(prim(x))) return 0;
x=x/10;}
return 1;}
void afis(int n)
{ if(n) { afis(n/10);
cout<<n<< ; }}
void main()
{clrscr();
cout<<n=; cin>>n;
if(superprim(n)) {cout<<este superprim;
cout<<endl;
afis(n);}
else cout<<nu este superprim;
getch();}
Problema 10
Se citesc de la tastatur n numere naturale (n<=30) . Se
cere s se ordoneze irul n ordine cresctoare dup
numrul de apariii a cifrei 1 n reprezentarea n baza 2 a
numerelor. n cazul n care dou numere au acelai numr
de cifre egale cu 1 n reprezentarea lor binar atunci ele
vor aprea ordonate descrescator.
Ex : Dac se citete vectorul ( 5, 4, 3,15,16, 8), dup ordonare trebuie s se
obin (16,8,4,5,3,15).
#include<iostream.h>
#include<conio.h>
int n,v[20];
void citire()
{int i;
cout<<n= ;cin>>n;
for(i=1;i<=n;i++)
{cout<<v[<<i<<]=;cin>>v[i];}}
void afis()
{int i;
for(i=1;i<=n;i++)
cout<<v[i]<< ;
cout<<endl;}
int cifre(int x)
{int c,nr=0;
while(x) {c=x%2;
if(c==1) nr++;
x/=2;}
return nr;}
void ordonare()
{int i,j,aux;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(cifre(v[i])>cifre(v[j])) {aux=v[i];v[i]=v[j];v[j]=aux;}
else if(cifre(v[i])==cifre(v[j]))
if(v[i]<v[j]) {aux=v[i];v[i]=v[j];v[j]=aux;}}
void main()
{clrscr();
citire();
afis();
ordonare();
afis();
getch(); }

Problema 11
Se consider un vector cu n numere naturale nenule (2<=n<=30) .S se determine
c.m.m.d.c i c.m.m.m.c pentru numerele date.
#include<iostream.h>
#include<conio.h>
int n,v[30];
void citire()
{int i;
cout<<n= ;cin>>n;
for(i=1;i<=n;i++)
{cout<<v[<<i<<]=;cin>>v[i];}
cout<<endl;}
int cmmdc(int x,int y)
{while(x!=y) if(x>y) x-=y;
else y-=x;
return x;}
int cmmmc(int x,int y)
{return (x*y)/cmmdc(x,y);}
void main()
{clrscr();
citire();
int d,m;
d=m=v[1];
for(int i=2;i<=n;i++)
{d=cmmdc(d,v[i]);
m=cmmmc(m,v[i]);
cout<<d<< <<m;}
getch();}
Problema 12
Se d un vector de n (n<=50) numere naturale nenule . S se elimine din vector
toate numerele prime (far a folosi alt vector).
#include<iostream.h>
#include<conio.h>
int n,v[50];
void citire()
{int i;
cout<<n= ;cin>>n;
for(i=1;i<=n;i++)
{cout<<v[<<i<<]=;cin>>v[i];}
cout<<endl;}
void afis()
{int i;
for(i=1;i<=n;i++)
cout<<v[i]<< ;
cout<<endl;}
int prim(int x)
{int d;
if(x<2) return 0;
for(d=2;d<=x/2;d++)
if(x%d==0) return 0;
return 1;}
void eliminare()
{for(int i=1;i<=n;i++)
if(prim(v[i])) {for(int j=i+1;j<=n;j++)
v[j-1]=v[j];
n;}}
void main()
{clrscr();
citire();
eliminare();
afis();
getch();}
Problema 13
Se consider un vector cu n componente.(n<=30). Pentru o valoare p data (1<p<n)
ordonai crescator subsecventele formate din primele p, respectiv ultimele n-p
elemente i apoi ordonati ntregul vector prin interclasarea celor dou
subsecvene.
#include<iostream.h>
int n;
void ordonare(int v[30],int p, int n)
{int i,j,aux;
for(i=p;i<n;i++)
for(j=i+1;j<=n;j++)
if(v[i]>v[j]) {aux=v[i];
v[i]=v[j];
v[j]=aux;}}
void interclasare(int v[30], int x[30], int p)
{int i=1,j=p+1,k=0,n;
while(i<=p&&j<=n)
if(v[i]<v[j]) {k++; x[k]=v[i]; i++;}
else {k++; x[k]=v[j]; j++;}
while (i<=p) {k++; x[k]=v[i]; i++;}
while (j<=n) {k++; x[k]=v[j]; j++;}}
void main()
{int v[30], x[30], n,i,p;
cout<<n=; cin>>n;
for(i=1;i<=n;i++)
{cout<<v[<<i<<]=;
cin>>v[i];}
cout<<endl;
cout<<p=; cin>>p;
ordonare(v,1,p);
ordonare(v,p+1,n);
interclasare(v,x,p);
for(i=1;i<=n;i++)
cout<<x[i]<< ;}
Problema 14
Se d o matrice patratic de ordinul n. Se consider c diagonalele sale mpart
matricea n 4 zone : nord, sud, vest si est. Se cere s se calculeze suma
elementelor perfecte din zona de nord a matricei i produsul elementelor prime
din sud.(zonele nu includ i diagonalele)
#include<iostream.h>
#include<math.h>
int prim(int x)
{int d;
if(x<2) return 0;
for(d=2;d<=sqrt(x);d++)
if(x%d==0) return 0;
return 1;}
int perfect(int x)
{int d,s=1;
for(d=2;d<=x/2;d++)
if(x%d==0) s+=d;
return(x==s);}
void main()
{int a[10][10],n,i,j;
cout<<n=; cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{cout<<a[<<i<<][<<j<<]=;
cin>>a[i][j];}
long s=0, p=1;
for(i=1;i<n/2;i++)
for(j=i+1;j<=n-i;j++)
if(perfect(a[i][j])) s+=a[i][j];
for(i=n/2+1;i<=n;i++)
for(j=n-i+2;j<=i-1;j++)
if(prim(a[i][j])) p*=a[i][j];
cout<<s=<<s<<endl;
cout<<p=<<p;}
Problema 15
S se construiasc o matrice A cu n linii si n coloane care sa contina primii n*n
termeni din irul lui Fibonacci. Completarea se va face pe linii.
Pentru n=3 se va afia matricea :
1 1 2
3 5 8 13 21 34.
#include<iostream.h>
#include<iomanip.h>
int i,j,n,b,t,f,a[10][10];
void main()
{cout<<n=; cin>>n;
a[1][1]=1; a[1][2]=1;
b=1; t=1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(!((i==1&&j==1)||(i==1&&j==2)))
{f=b+t;
a[i][j]=f;
b=t; t=f;}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
cout<<setw(5)<<a[i][j];
cout<<endl;}

Problema 16
Se citete de la tastatur un cuvnt de lungime cel mult 20 de caractere, format
numai din litere mari. S se afieze toate cuvintele distincte ce se pot forma prin
eliminarea cte unui caracter din cuvntul dat.
Ex. Pentru cuvntul BINE se vor afia, nu neaprat in aceast ordine, cuvintele :
INE, BNE, BIE, BIN.
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{char a[100],b[100];
cout<<dati sirul a ;
cin>>a;
int n=strlen(a);
for(int i=1;i<=n;i++)
{strcpy(b,a);
strcpy(b+i,b+i+1);
cout<<b<<endl;} }
Problema 17
Se citesc n (n<=50) cuvinte cu maxim 20 litere fiecare. S se afieze cuvintele
distincte i frecventele de apariie.
Ex. Nr. de cuvinte = 5
Se vor citi cuvintele : magic, tragic, magic, tragic, magic.
Se va afisa : magic cu frecventa 3
tragic cu frecventa 2
#include<iostream.h>
#include<string.h>
void main()
{char s[50][20];
int n,i,j,nr;
cout<<n=; cin>>n;
cin.get();
for(i=0;i<n;i++)
{cout<<dati cuvantul<<i<< ;
cin.get(s[i],20);
cin.get();}
for(i=0;i<=n;i++)
{nr=0;
for(j=0;j<i;j++)
if(strcmp(s[i],s[j])= =0) nr++;
if(nr= =0)
{for(j=i;j<n;j++)
if(strcmp(s[i],s[j])= =0) nr++;
cout<<s[i]<<cu frecventa<<nr<<endl; }
}}
Problema 18
Scriei un program care citete de la tastatur dou numere naturale n,m i scrie
n fiierul text DATE.TXT toate numerele prime din intervalul deschis (n,m).
Numerele se scriu n ordine cresctoare, cte 10 numere pe fiecare linie a
fiierului, numerele dintr-o linie fiind desprite ntre ele prin cte un spaiu.
Ex. Pentru n=87 si m=241, fiierul DATE.TXT va conine :
89 97 101 103 107 109 113 127 131 137
139 149 151 157 163 167 173 179 181 191
193 197 199 211 223 227 229 233 239
#include<iostream.h>
#include<fstream.h>
#include<math.h>
int prim(int x)
{int d;
if(x<2) return 0;
for(d=2;d<=sqrt(x);d++)
if(x%d==0) return 0;
return 1;}
void main()
{int i,n,x,m,nr=0;
ofstream f (DATE.TXT);
cout<<n=; cin>>n;
cout<<m=; cin>>m;
for(x=n+1;x<m;x++)
if(prim(x)) {f<<x<< ;
nr++;
if(nr%10= =0)
f<<endl;}}
Problema 19
S se descompun un numr natural n factori primi, memornd rezultatul sub
forma unui vector de nregistrari : fiecare nregistrare va cuprinde doua cmpuri,
unul indicnd factorul prim, iar cellalt puterea la care apare n descompunere.
Ex. Pentru n=1960 se obine vectorul de nregistrari ((2,3), (5,1), (7,2)) unde
primul numr din fiecare parantez reprezint factorul prim, iar al doilea
reprezint exponentul.
#include<iostream.h>
#include<conio.h>
int n,d,nr,aux,k;
struct{int f,p;} v[20];
void main()
{clrscr();
cout<<n= ;cin>>n;
aux=n;
d=2;
while(aux!=1)
{nr=0;
while(aux%d==0)
{nr++;
aux/=d;}
if(nr!=0) {k++; v[k].f=d; v[k].p=nr;}
d++; }
for(int i=1;i<=k;i++)
cout<<(<<v[i].f<<,<<v[i].p<<); getch();}

Problema 20
Scriei un program prin care se citete de pe prima linie a fiierului NUMERE.TXT o
valoare natural n (0<n<=20), iar de pe a doua linie n valori ntregi (distincte ntre
ele). S se rescrie cele n valori n fiierul REZULTATE.TXT, n aceeasi ordine, doar
valoarea mai mare s fie schimbat cu valoarea mai mic i invers , valoarea cea
mai mica s fie schimbat cu valoarea cea mai mare (in toate apariiile acestora ).
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
void main()
{ clrscr();
ifstream f(NUMERE.TXT);
ofstream g(REZULTAT.TXT);
int n,v[25],max,min,i;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
max=min=v[1];
for(i=2;i<=n;i++)
if(v[i]>max) max=v[i];
else if(v[i]<min) min=v[i];
for(i=1;i<=n;i++)
if(v[i]==max) v[i]=min;
else if(v[i]==min) v[i]=max;
for(i=1;i<=n;i++)
g<<v[i]<< ;
getch();}
Problema 21
Se citete de la tastatur un numr natural n cu maxim 9 cifre. S se afieze cel
mai mare numr care se poate forma cu cifrele distincte ale numrului dat.
Ex. Pentru numrul 29363, mulimea cifrelor distincte este {2, 3, 6, 9}, iar numrul
cerut este 9632.
#include<iostream.h>
#include<conio.h>
int apartine(int x,int c)
{while(x) { if(x%10==c)
return 1;
x=x/10;}
return 0;}
void main()
{clrscr();
int x,c;
cout<<x=;
cin>>x;
for(c=9;c>=0;c)
if(apartine(x,c)) cout<<c;
getch();}
Problema 22
S se verifice dac un vector dat este o multime (toate elementele vectorului sunt
distincte). Dac nu este mulime s se transforme acest vector n mulime.
Ex. Dac se citeste vectorul x=(1, 2, 9, 4, 2, 6, 5, 1, 20, 3) se va afia rezultatul sub
forma:
Nu este o multime.
Mulimea este : {1, 2, 9, 4, 6, 5, 20, 3}.
#include<iostream.h>
int n, v[30],i,j;
int multime()
{int i,j,n;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(v[i]= =v[j]) return 0;
return 1;}
void main()
{cout<<n=; cin>>n;
for(i=1;i<=n;i++)
{cout<<v[<<i<<]=;
cin>>v[i];}
cout<<endl;
if(multime()) cout<<vectorul este multime;
else { cout<<vectorul nu este multime<<endl;
cout<<{;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(v[i]= =v[j]) { for( int k=j;k<=n;k++)
v[k]=v[k+1];
n;
j;}
for(i=1;i<=n;i++)
cout<<v[i]<< ;}
cout<<}; }

Problema 23
Scriei un program care descompune un numr natural n factori primi i afieaz
factorii care au puterea cea mai mare.
#include<iostream.h>
#include<conio.h>
int n,d,nr,aux,k;
struct{ int f,p;} v[20];
void main()
{clrscr();
cout<<n=; cin>>n;
k=0;
aux=n;
d=2;
while(aux!=1)
{nr=0;
while(aux%d==0) {nr++;
aux/=d;}
if(nr!=0) {k++; v[k].f=d; v[k].p=nr;}
d++;}
int max=v[1].p;
for(int i=2;i<=k;i++)
if(v[i].p>max) max=v[i].p;
cout<<factor la puterea cea mai mare<<endl;
for(i=1;i<=k;i++)
if (v[i].p==max) cout<<v[i].f<< <<v[i].p<<endl;
getch();}
Problema 24
Ex. Pentru x=(2,1,3,4,7)
y=(2,3,5,7,9,1) se va afia : Reuniunea este : (2,1,3,4,7,5,9).
#include<iostream.h>
int multime(int v[10],int n)
{int i,j;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(v[i]= =v[j]) return 0;
return 1;}
int apartine(int x,int v[10], int n)
{int i;
for(i=1;i<n;i++)
if(x==v[i]) return 1;
return 0;}
void citire(int v[10], int &n)
{int i;
cout<<dati nr de elem:;
cin>>n;
for(i=1;i<=n;i++)
{cout<<dati elem<<i<< ;
cin>>v[i];} }
void main()
{int a[10],b[10],n,m,i;
citire(a,n);
citire(b,m);
if(multime(a,n)) {cout<<a este multime<<endl;
if(multime(b,m)) {cout<<b este multime<<endl;
for(i=1;i<=n;i++)
cout<<a[i]<< ;
for(i=1;i<=m;i++)
if(!(apartine(b[i],a,n))) cout<<b[i]<< ;}
else cout<<b nu este multime;}
else {cout<<a nu este multime;
if(multime(b,m)) cout<<b este multime;
else cout<<b nu este multime; } }
Problema 25
Pentru un numr n (n<=15) s se construiasca triunghiurile de numere ca mai
jos :
1
1 2
1 2 3
1 2 3 4

1 2 3 4 n.
sau
#include<iostream.h> #include<iostream.h>
#include<conio.h> #include<conio.h>
#include<iomanip.h> #include<iomanip.h>
int i,j,n; int i,j,n,k;
void main() void main()
{clrscr(); {clrscr();
cout<<n=; cin>>n; cout<<n=; cin>>n;
for(i=1;i<=n;i++) for(i=1;i<=n;i++)
{for(j=1;j<i;j++) {for(j=1;j<i;j++)
cout<< ; cout<<setw(3)<<j;
for(j=1;j<=i;j++) cout<<endl;}
cout<<setw(3)<<j; cout<<endl;
cout<<endl;} for(i=1;i<=n;i++)
cout<<endl; {for(j=1;j<i;j++)
for(i=1;i<=n;i++ ) cout<< ;
{for(j=n-i+1;j>=1;j) for(j=i;j<=n;j++)
cout<<setw(3)<<j; cout<<setw(3)<<n-j+i;
cout<<endl;} cout<<endl;}
getch();} getch();}
Problema 26
S se afieze toate cuvintele palindromice dintr-un ir de cuvinte care se citesc de
la tastatur (un cuvnt este palindrom daca citit invers se obine acelai cuvnt).
Ex. Cuvntul ANA este palindrom.
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{int n,i;
char s[100][25],t[30];
clrscr();
cout<<n=; cin>>n;
for(i=1;i<=n;i++)
{cout<<dati cuv<<i;
cin>>s[i];}
for(i=1;i<=n;i++)
{strcpy(t,s[i]);
strrev(t);
if(strcmp(t,s[i])==0)
cout<<s[i]<< ;}
getch();}
Problema 27
Din cei n elevi cu rezultate deosebite la informatica dintr-o clas vor fi selectai p
elevi pentru a participa la un concurs. Afisai numrul de posibiliti de selectare a
elevilor.(1<=p<=n<=10)
Ex. Pentru n=4 si p=3 se va afia 4.
#include<iostream.h>
#include<conio.h>
long factorial(int n)
{long p=1;
for(int i=2;i<=n;i++)
p=p*i;
return p;}
void main()
{int n,p;
clrscr();
cout<<n=; cin>>n;
cout<<p=; cin>>p;
cout<<factorial(n)/(factorial(p)*factorial(n-p));
getch();}
sau
#include<iostream.h>
#include<conio.h>
long combinari(int n,int k)
{if(n==k) return 1;
else if(k==0) return 1;
else return combinari(n-1,k)+combinari(n-1,k-1);}
void main()
{clrsc();
int n,p;
cout<<n=; cin>>n;
cout<<p=; cin>>p;
cout<<combinari(n,p);
getch();}
Problema 28
S se scrie un program care creeaz o lista liniar dublu nlanuit cu n numere
reale.(n<=30) S se insereze ntre oricare dou noduri alturate ale listei un nod
coninnd ca informaie media aritmetic a numerelor din nodurile vecine.
Ex. Dac n lista sunt memorate numerele 2, 9, 12, 6, 1 atunci n final lista va
conine 2, 5.5, 9, 10.5, 12, 9, 6, 3.5, 1.
#include<iostream.h>
struct nod { float inf;
nod *urm,*ant;} *p,*q;
int n;
void creare(nod *&p)
{cout<<n=; cin>>n;
p=new nod;
cout<<informatia:;
cin>>p->inf;
p->urm=NULL;
p->ant=NULL;
q=p;
for(int i=2;i<=n;i++)
{q->urm=new nod;
q->urm->ant=q;
q=q->urm;
cout<<informatia:;
cin>>q->inf;
q->urm=NULL;} }
void afis( nod *p)
{q=p;
for(q=p;q!=NULL;q=q->urm)
{cout<<q->inf<< ; }
cout<<endl;}
void inserare(nod *p)
{nod *q,*r;
for(q=p;q->urm!=NULL;q=q->urm->urm)
{r=new nod;
r->inf=(q->inf+q->urm->inf)/2;
r->urm=q->urm;
r->ant=q;
afis(p);
q->urm=r;} }
void main()
{ creare(p);
afis(p);
inserare(p);
q->urm->ant=r;
Problema 29
Se dau n numere naturale cu maxim 9 cifre fiecare. S se scrie un program care
calculeaza cifra de control a fiecrui numr efectund suma cifrelor sale, apoi
suma cifrelor acestei sume etc. pan se obine o sum format dintr-o singur
cifr.
Ex. Cifra de control a numrului 1971 este 9 ( 1971 -> 18 ->9).
#include<iostream.h>
#include<conio.h>
int suma(int x)
{int s=0;
while(x) {s+=x%10;
x=x/10; }
return s;}
void main()
{int v[30],n,i,s;
cout<<n=; cin>>n;
for(i=1;i<=n;i++)
{cout<<v[<<i<<]=;
cin>>v[i];}
for(i=1;i<=n;i++)
{cout<<cifra de control pt<<v[i]<< ;
do{s=suma(v[i]);
v[i]=s;}
while(s>=10);
cout<<s<<endl;} }
Problema 30
Scriei un program care s determine cel mai apropiat numr prim fa de un
numr natural n (2<=n<=32000). Dac sunt 2 nr. cu aceast proprietate vor fi
afiate amndou.
#include<iostream.h>
#include<conio.h>
#include<math.h>
int prim(int x)
{ int d;
if(x<2) return 0;
for(d=2;d<=sqrt(x);d++)
if(x%d==0) return 0;
return 1; }
void main()
{ clrscr();
int n,i=1,OK=0;
cout<<n=; cin>>n;
while(!OK)
{ if(prim(n-i)) { cout<<n-i<< ;
OK=1; }
if(prim(n+i)) { cout<<n+i<< ;
OK=1; }
i++; }
getch();}
Problema 31
Dndu-se o matrice cu n*n elemente, se cere s se
formeze un vector, prin parcurgerea matricei sub forma de
L. Exemplu : Dac n=3 matricea va fi parcursa dupa
modelul: a11, a21, a31, a32, a33, a12, a22, a23, a13.
Deci pentru matricea :
1 2 3
4 5 6
7 8 9
Se va afia vectorul: 1, 4, 7, 8, 9, 2, 5, 6, 3.
#include<iostream.h>
#include<conio.h>
int a[10][10],v[100],n,i,j,k;
void main()
{clrscr();
cout<<n=; cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{cout<<a[<<i<<][<<j<<]=;
cin>>a[i][j];}
k=0;
for(j=1;j<=n;j++)
{for(i=1;i<=n-j+1;i++)
{k++;
v[k]=a[i][j];}
for(i=j+1;i<=n;i++)
{k++;
v[k]=a[n-j+1][i];}}
for(k=1;k<=n*n;k++)
cout<<v[k]<< ;
getch();}
Problema 32
S se afieze toate numerele prime de trei cifre care citite
invers, sunt tot numere prime. Numerele vor fi afisate pe
ecran cate 10 pe fiecare linie cu spaii intre ele.
Ex. Un astfel de numr este 761 (761 este prim i 167 este tot prim).
#include<iostream.h>
#include<math.h>
int prim(int x)
{int d;
if(x<2) return 0;
for(d=2;d<=sqrt(x);d++)
if(x%d==0) return 0;
return 1;}
void main()
{int a,b,c,x,o,nr=0;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=1;c<=9;c+=2)
{x=a*100+b*10+c;
o=c*100+b*10+a;
if(prim(x)&&prim(o)) {cout<<x<< ;
nr++;
if(nr%10= =0) cout<<endl;}}
Problema 33
Scriei un program care verific dac un numr natural cu
maxim 9 cifre este bine ordonat cresctor (cifrele sale
citite de la stnga la dreapta sunt n ordine cresctoare )
Ex. Numrul 2356 este un numr bine ordonat cresctor.
#include<string.h>
#include<stdlib.h>
long n;
char s[10];
int m,i,OK;
void main()
{clrscr();
cout<<n=; cin>>n;
ltoa(n,s,10);
m=strlen(s);
OK=1;
for(i=0;i<m-1;i++)
if(s[i]>s[i+1]) OK=0;
if(OK) cout<<este bine ordonat crescator;
else cout<<nu este bine ordonat crescator;}
Problema 34
Se d un tablou bidimensional cu n linii i m coloane avnd
componente binare, fiecare linie reprezentnd cte un
numr natural n baza 2. S se afieze numerele n baza
10, fiecare pe cate un rand.
#include<iostream.h>
#include<conio.h>
void main()
{clrscr();
int a[10][10],n,m,i,j,nr;
cout<<n=; cin>>n;
cout<<m=; cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{cout<<a[<<i<<][<<j<<]=;
cin>>a[i][j];}
for(i=1;i<=n;i++)
{nr=a[i][1];
for(j=2;j<=m;j++)
nr=nr*2+a[i][j];
cout<<nr<<endl;}
getch();}
Problema 35
Pentru evidena depozitelor populaiei la C.E.C. se
folosete fiierul text CEC.IN, care conine pentru
fiecare persoana trei randuri : pe un rnd numele acelei
persoane, pe urmatorul rand prenumele acesteia i pe al
treilea rand suma depus .
S se scrie n fiierul CEC.OUT depuntorii a cror sum
depus se afl ntre dou limite s1 i s2 date de la
tastatur. Fiierul de iesire va contine pe fiecare rnd
informaiile despre o persoan numele, prenumele i
suma depus separate prin spaii.
#include<iostream.h>
#include<fstream.h>
typedef struct {char nume[15],prenume[15];
int suma;} persoana;
persoana v[100];
int n,i,s1,s2;
ifstream f(CEC.IN);
ofstream g(CEC.OUT);
void main()
{n=0;
while(!f.eof())
{f>>v[n].nume>>v[n].prenume>>v[n].suma;
n++;}
f.close();
cout<<s1=; cin>>s1;
cout<<s2=; cin>>s2;
for(i=0;i<n;i++)
if((v[i].suma<s2)&&(v[i].suma>s1))
g<<v[i].nume<< <<v[i].prenume<< <<v[i].suma<<endl;
g.close();}
Problema 36
Creai dou liste liniare simplu inlnuite care s conin n
partea de informatie n, respectiv m numere intregi care se
citesc de la tastatur. Verificai apoi dac cele dou liste
sunt identice sau nu.
#include<iostream.h>
int n,m;
struct nod{int inf;
nod *urm;} *p1,*p2;
void creare(nod *&p, int &n)
{ nod *q;
cout<<n=; cin>>n;
p=new nod;
cout<<informatia:;
cin>>p->inf;
p->urm=NULL;
q=p;
for(int i=2;i<=n;i++)
{q->urm=new nod;
q=q->urm;
cout<<informatia:;
cin>>q->inf;
q->urm=NULL; }}
int verificare(nod *p1,nod *p2)
{nod *q1,*q2;
q1=p1;
q2=p2;
while(q1&&q2) {if(q1->inf!=q2->inf) return 0;
q1=q1->urm;
q2=q2->urm;}
if(q1||q2) return 0;
return 1;}
void main()
{creare(p1,n);
creare(p2,n);
verificare(p1,p2);}
Problema 37
Se citete de la tastatur un numr natural x cu maxim
nou cifre. S se afieze toate numerele care se obin prin
eliminarea pe rnd a cte unei singure cifre din x, precum
i cel mai mare dintre aceste numere.
Ex: x= 425978
Pe ecran se va afia: 42597, 42598, 42578, 42978, 45978, 25978
Cel mai mare numar este: 45978.
#include<iostream.h>
#include<string.h>
long x,y,max;
char s[10],a[10];
int n,i;
void main()
{cout<<x=;cin>>x;
max=0;
ltoa(x,s,10);
n=strlen(s);
for(i=n-1;i>=0;i)
{strcpy(a,s);
strcpy(a+i,a+i+1);
atol(a,y);
cout<<y<<endl;
if(y>max) max=y;}
cout<<max;}

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