Sunteți pe pagina 1din 21

Soluii pentru problemele propuse

http://www.cnchogastecuci.ro/portofoliu/solutii/pb54.html ----SITE C++


http://info.mcip.ro/?cap=Algoritmi%20elementari&prob=242 ---c++ teorie
#include<iostream>
using namespace std;
int main()
{
int n,k=0,ok=1;
cout<<"n=";cin>>n;
while(n>9 && ok==1)
{
if(n%10==0)
k++;
else
ok=0;
n=n/10;
}
cout<<k;

Enunul problemei
S se afieze numrul de cifre de 0 de la sfritul
unui numr de maxim 9 cifre. Exemplu: pentru
n=10230000 se va afia 4.

#include<iostream>
using namespace std;
int main()
Enunul problemei
{
int n,a,i;
cout<<"a=";cin>>a;
Se dau numerele a i n. S se afieze numrul a
cout<<"n=";cin>>n;
urmat de n zerouri. Exemplu: pentru a=45 i n =3
for(i=1;i<=n;i++)
se afieaz 45000.
a=a*10;
cout<<a;
}
Modificai programul nlocuind structura repetitiv cu numr cunoscut de pai FOR cu structura
repetitiv condiionat anterior WHILE sau cu structura repetitiv condiionat posterior DO...WHILE.

#include<iostream>
using namespace std;
int main()
{
int a,b,r,x,y,cmmmc;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
x=a;y=b;
while(b!=0)
{
r=a%b;
a=b;
b=r;
}
cout<<"Cmmdc este "<<a<<"."<<endl;
cmmmc=(x*y)/a;
cout<<"Cmmmc este "<<cmmmc<<".";
}

Enunul problemei
Se citesc de la tastatur dou numere a i b. S
se calculeze i s se afieze pe ecran cel mai
mare divizor comun i cel mai mic multiplu comun
al celor dou numere.

#include<iostream>
using namespace std;

Enunul problemei

int main()
{
int n,i,s,x;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
s=0;
x=i;
while(x!=0)
{
s=s+x%10;
x=x/10;
}
if(s%2!=0)
cout<<i<<" ";
}
}

S se afieze toate numerele naturale, mai mici


sau egale cu n, care au suma cifrelor un numr
impar. Exemplu: pentru n=17 se afieaz pe
ecran numerele 1, 3, 5, 7, 9, 10, 12, 14, 16.

#include<iostream>
using namespace std;
int main()
{
int a,b,n,i;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
cout<<"n=";cin>>n;
for(i=a;i<=b;i++)
{
if(n%i==0)
cout<<i<<" ";
}
}

Enunul problemei
Se citesc de la tastatur trei numere a, b i n. S
se afieze divizorii lui n n intervalul [a,b](a mai
mic dect b). Exemplu pentru a=9, b=35 i n=140
se afieaz pe ecran numerele 10, 14, 20, 28, 35.

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n,d,s,k;
cout<<"n=";cin>>n;
s=1+n;k=2;
for(d=2;d<=n/2;d++)
{
if(n%d==0)
{
s=s+d;
k++;
}
}
//se afiseaza media cu 2 zecimale
cout<<fixed<<setprecision(2)<<(float)s/k;
}

Enunul problemei
Se citete de la tastatur un numr natural n. S
se calculeze i s se afieze media aritmetic a
tuturor divizorilor si. Exemplu: pentru n=9 se
afieaz pe ecran 4.33.

Enunul problemei

#include<iostream>
using namespace std;
int main()
{
int n,c,p,nr;

Se citesc de la tastatur un numr natural n i o


cifr c. S se elimine toate apariiile cifrei c din
scrierea numrului n. Exemplu: pentru

n=423227826 se afieaz pe ecran 43786.

cout<<"numarul:";cin>>n;
cout<<"cifra:";cin>>c;
nr=0;p=1;
while(n!=0)
{
if(n%10!=c)
{
nr=nr+p*(n%10);
p=p*10;
}
n=n/10;
}
cout<<nr;
}

#include<iostream>
using namespace std;
int main()
{
int n,i,ok,ogl,d,x;
cout<<"numarul:";cin>>n;
cout<<"2 ";
for(i=3;i<=n;i++,i++)
{
ok=1;x=i;
for(d=2;d<=i/2 && ok==1;d++)
if(i%d==0)
ok=0;
if(ok==1)
{
ogl=0;
while(x!=0)
{
ogl=ogl*10+x%10;
x=x/10;
}
for(d=2;d<=ogl/2 && ok==1;d++)
if(ogl%d==0)
ok=0;
if(ok==1)
cout<<i<<" ";
}
}
}

Enunul problemei
S se afieze pe ecran toate numerele prime mai
mici sau egale cu n (n < 100), pentru care
oglinditul corespunztor este tot un numr prim.
Exemplu: pentru n=20 se afieaz numerele 2, 3,
5, 7, 11, 13, 17.

#include<iostream>
using namespace std;
int main()
{
int n,sp,simp,x;
cout<<"n=";cin>>n;
while(n!=0)
{
x=n;sp=0;simp=0;
while(x!=0)
{
if(x%10%2==0)
sp=sp+x%10;
else
simp=simp+x%10;
x=x/10;
}

Enunul problemei
Scriei un program care citete de la tastatur mai
multe numere pn la ntlnirea valorii 0 i
afieaz pe ecran numerele care au suma cifrelor
pare egal cu suma cifrelor impare. Exemplu:
dac se citesc numerele 22031 9021 22131 1021
2011 10012 1023 459008 99782 0, atunci pe
ecran vor fi afiate numerele 22031 1021 2011
10012.

if(sp==simp)
cout<<n<<" ";
cout<<"n=";cin>>n;
}
}

#include<iostream>
using namespace std;
int main()
{
int i,x,zero,unu;
for(i=1;i<=9999;i++)
{
x=i;
zero=0;
unu=0;
while(x!=0)
{
if(x%2==0)
zero++;
else
unu++;
x=x/2;
}
if(zero==unu)
cout<<i<<" ";
}
}

Enunul problemei
Scriei un program care afieaz pe ecran toate
numerele naturale cu maxim 4 cifre care sunt
rotunde (numere care n sistemul binar au numr
egal de cifre de 0 i 1). Exemplu: 12=1100(2) este
numr rotund, 13=1101(2) nu este numr rotund.

#include<iostream>
using namespace std;
int main()
{
int i,s,uc,x,ok;
for(i=100;i<=599;i++)
{
x=i;ok=1;s=0;
while(x!=0 && ok==1)
{
uc=x%10;
s=s+x%10;
x=x/10;
if(uc<=x%10)
ok=0;
}
if(s==18)
cout<<i<<" ";
}
}

Enunul problemei
S se afieze toate numerele cuprinse ntre 100 i
599 care au cifrele n ordine cresctoare i suma
cifrelor 18.

Enunul problemei
Se citesc n numere naturale mai mici dect 1000
(n<=100). S se afieze mesajul "DA" dac suma
numerelor din ir este un numr prim i mesajul
"NU" n caz contrar. Exemplu: pentru n=6 i
numerele 34 89 567 10 3 67 se va afia NU; pentru
n=4 i numerele 4 9 6 10 se va afia DA.

#include<iostream>
using namespace std;
int main()
{
int n,i,x,ok,s=0,d;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{

cout<<"x=";cin>>x;
s=s+x;
}
ok=1;
for(d=2;d<=s/2 && ok!=0;d++)
if(s%d==0)
ok=0;
if(ok!=0)
cout<<"DA";
else
cout<<"NU";
}

#include<iostream>
using namespace std;
int main()
{
int n,i,x,ok,s=0,d;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"x=";cin>>x;
s=s+x;
}
ok=1;
for(d=2;d<=s/2 && ok!=0;d++)
if(s%d==0)
ok=0;
if(ok!=0)
cout<<"DA";
else
cout<<"NU";
}

Enunul problemei
Se citesc n numere naturale mai mici dect 1000
(n<=100). S se afieze mesajul "DA" dac suma
numerelor din ir este un numr prim i mesajul
"NU" n caz contrar. Exemplu: pentru n=6 i
numerele 34 89 567 10 3 67 se va afia NU;
pentru n=4 i numerele 4 9 6 10 se va afia DA.

13.
#include<iostream>
using namespace std;
int main()
{
int n,k=0;
cout<<"n=";
cin>>n;
while(n%2==0)
{
n=n/2;
k++;
}
if(n==1)
{
cout<<"DA"<<endl;
cout<<"2 ^ "<<k;
}
else
cout<<"NU";
}
#include<iostream>
using namespace std;
int main()

Enunul problemei
Se citete de la tastatur un numr natural n. S
se verifice dac numrul n citit este putere a lui 2.

14. Enunul problemei


Scriei un program care citete de la tastatur un
numr natural n i afieaz pe ecran numrul n i

toate prefixele nenule ale acestuia, pe o singur


linie, separate prin cte un spaiu, n ordinea
descresctoare a valorii lor. Exemplu: n=10305,
se vor afia numerele 10305 1030 103 10 1.

{
int n;
cout<<"n=";
cin>>n;
while(n!=0)
{
cout<<n<<" ";
n=n/10;
}

}
Modificai programul, astfel nct, s afieze numrul n i prefixele acestuia n ordinea cresctoare a
valorii lor. Exemplu: n=10305, se vor afia numerele 1 10 103 1030 10305.

#include<iostream>
using namespace std;
int main()
{
int s,z,u,nr;
for(z=0;z<=9;z++)
for(u=0;u<=9;u++)
{
s=z+u;
if(s>0 and s<=9)
{
nr=s*100+z*10+u;
cout<<nr<<" ";
}
}
}

Enunul problemei
S se genereze toate numerele naturale de 3 cifre
pentru care cifra sutelor este egal cu suma
cifrelor zecilor i unitilor. Exemplu: 101, 202,
303, ....., 990.

#include<iostream>
using namespace std;
int main()
{
int x,y,invy;
cout<<"x=";cin>>x;
cout<<"y=";cin>>y;
invy=0;
while(y!=0)
{
invy=invy*10+y%10;
y=y/10;
}
while(invy!=0)
{
x=x*10+invy%10;
invy=invy/10;
}
cout<<x;
}

Enunul problemei
Se citesc dou numere x i y, cu cel mult 4 cifre
fiecare. S se afieze numrul obinut prin
concatenarea cifrelor lui y cu cifrele lui x.
Exemplu:x=1234 i y=5678, se obine numrul
12345678.

#include<iostream>
using namespace std;
int main()
{
int n,nr,uc,p=1;
cout<<"n=";cin>>n;
nr=0;
while(n!=0)
{

Enunul problemei
S se afieze numrul obinut prin eliminarea
cifrelor pare ale unui numr n citit de la tastatur.

uc=n%10;
if(uc%2!=0)
{
nr=nr+p*uc;
p=p*10;
}
n=n/10;
}
cout<<nr;
}

18.
#include<iostream>
using namespace std;
int main()
{
int n,ok,i,j,d;
cout<<"n=";cin>>n;
for(i=3;i<n;i++,i++){
ok=1;
for(d=2;d<=i/2 && ok==1;d++)
if(i % d==0)
ok=0;
if(ok==1){
j=i+2;
if(j<n){
for(d=2;d<=j/2 && ok==1;d++)
if(j%d==0)
ok=0;
if(ok==1)
cout<<"("<<i<<","<<j<<")"<<" ";
}}}
}

Enunul problemei
S se afieze toate perechile de numere gemene
mai mici dect o valoare n citit de la tastatur
(dou numere impare se numesc gemene dac
sunt prime i consecutive). Exemplu: n=20, se
afieaz pe ecran (3,5), (5,7), (11,13), (17,19).

#include<iostream>
using namespace std;
int main()
{
int n,i,x,s=0,y;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"x=";cin>>x;
y=sqrt(double(x));
if(y*y==x)
s=s+x;
}
cout<<s;
}

Enunul problemei
Se citete de la tastatur un ir de n numere
naturale. S se afieze suma ptratelor perfecte
din ir. Exemplu: n=10, irul 3, 16, 40, 9, 5, 7, 25,
121, 6, 99 - pe ecran se va afia 171.

Enunul problemei

#include<iostream>
using namespace std;
int main()
{
int n,ok=1,d,y;
cout<<"n=";cin>>n;
y=n;

Un numr se numete superprim dac el i


prefixele lui sunt prime. S se scrie un program
care citete de la tastatur un numr natural n i
verific dac este superprim. Exemplu: n=2339
este superprim deoarece el, 2339, i prefixele lui,

while(n!=0 && ok==1)


{
for(d=2;d<=n/2 && ok!=0;d++)
if(n % d==0)
ok=0;
if(ok==1)
n=n/10;
}
if(ok==0)
cout<<"Nu este superprim!";
else
{
while(y!=0)
{
cout<<y<<" ";
y=y/10;
}
}

233, 23, 2 sunt prime.

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n,i,s=0,k=0,x,uc;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"x=";cin>>x;
uc=x%10;
if(x%uc==0)
{
s=s+x;
k++;
}
}
cout<<fixed<<setprecision(2)<<(float)s/k;
}

Enunul problemei
Se citesc n valori ntregi. S se calculeze media
aritmetic a tuturor valorilor care sunt divizibile cu
propria cifr a unitii lor. Exemplu: n=10 i
numerele 23 16 74 9 15 17 24 21 6 19 se va afia
pe ecran valoarea 15,00.

#include<iostream>
using namespace std;
int main()
{
int n,x,ogl=0;
cout<<"n=";cin>>n;
x=n;
while(x!=0)
{
ogl=ogl*10+x%10;
x=x/10;
}
if(ogl==n)
cout<<"DA";
else
cout<<"NU";
}

Enunul problemei
Se citete de la tastatur un numr natural n cu
cel mult 8 cifre. S se verifice dac numrul citit
este palindrom. Un numr este palindrom dac
citit de la dreapta la stnga este egal cu numrul
citit de la stnga la dreapta. Exemplu: n=12334,
se afieaz NU; n=12321, se afieaz DA.

#include<iostream>
using namespace std;

Enunul problemei

int main()
{
int a,b,aux,pa=1,pb=1;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
aux=a;
while(aux!=0)
{
pa=pa*(aux%10);
aux=aux/10;
}
aux=b;
while(aux!=0)
{
pb=pb*(aux%10);
aux=aux/10;
}
if(pa>pb)
cout<<a;
else
cout<<b;
}

Se dau dou numere naturale a i b cu cel mult 8


cifre. S se afieze numrul care are produsul
cifrelor mai mare. Exemplu: a=23413, b=1123112,
atunci se va afia numrul a.

#include<iostream>
using namespace std;
int main()
{
int a,b,i,ok,d,x,k=0;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
if(a>b)
{ x=a;a=b;b=x;}
for(i=a;i<=b;i++)
{
ok=1;
for(d=2;d<=i/2 && ok;d++)
if(i%d==0)
ok=0;
if(ok)
{
cout<<i<<" ";
k++;
}
}
cout<<endl;
cout<<"s-au gasit "<<k<<endl;
cout<<"numere prime.";
}

Enunul problemei
S se afieze toate numerele prime din intervalul
[a,b], precum i numrul acestora , unde a i b
sunt dou numere naturale date.
Exemplu:a=20,b=4 se afieaz numerele 5, 7, 11,
13, 17, 19 respectiv s-au gsit 6 numere prime.

#include<iostream>
using namespace std;
int main()
{
int n,i,x,p,nr;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"x=";cin>>x;

Enunul problemei
Se citesc n numere naturale. S se afieze,
pentru fiecare numr din ir, numrul obinut prin
eliminarea cifrelor 0.

p=1;nr=0;
while(x)
{
if(x%10!=0)
{
nr=nr+p*(x%10);
p=p*10;
}
x=x/10;
}
cout<<nr<<" ";
}
}

#include<iostream>
using namespace std;
int main()
{
int x,k=0,c;
cout<<"x=";cin>>x;
c=x;
while(c)
{
k++;
c/=10;
}
cout<<(pow(10,double(k))-1)-x;
}

Enunul problemei
Se numete urma numrului x, valoarea obinut
prin diferena dintre numrul cu attea cifre de 9
cte cifre are x i numrul x. Calculai i afiai
urma unui numr x citit de la tastatur.
Exemplu:x=12345 se afieaz 87654.

#include<iostream>
using namespace std;
int main()
{
int x,k=0,c,ogl=0,urma;
cout<<"x=";cin>>x;
c=x;
while(c)
{
k++;
ogl=ogl*10+c%10;
c/=10;
}
urma=(pow(10,double(k))-1)-x;
cout<<"urma:"<<urma<<endl;
cout<<"oglinditul:"<<ogl<<endl;
if(ogl==urma)
cout<<"DA";
else
cout<<"NU";
}

Enunul problemei
Se numete numr curat un numr y cu
proprietatea c urma sa este egal cu oglinditul
su. Verificai proprietatea de numr curat pentru
o valoare y citit de la tastatur.

Enunul problemei

#include<iostream>
using namespace std;
int main()
{
int n,sp=0,simp=0,i=0,c;
cout<<"n=";cin>>n;
c=n;

S se scrie un program care verific dac suma


cifrelor de pe poziiile impare i suma cifrelor de
pe poziiile pare a unui numr natural n citit de la
tastatur sunt egale. Se afieaz sumele i un
mesaj corespunztor pe ecran. Exemplu:

10

n=12345, se afieaz sp=6, simp=9, Nu coincid!.

while(c)
{
i++;
c/=10;
}
while(n)
{
if(i%2==0)
sp=sp+n%10;
else
simp=simp+n%10;
n=n/10;
i--;
}
cout<<sp<<" "<<simp<<" ";
if(sp==simp)
cout<<"Sunt egale!";
else
cout<<"Nu coincid!";
}

#include<iostream>
using namespace std;
int main()
{
int n,s;
cout<<"n=";cin>>n;
while(n>9)
{
s=0;
while(n)
{
s=s+n%10;
n=n/10;
}
n=s;
}
cout<<s;
}

Enunul problemei
S se scrie un program care calculeaz "cifra de
control" a unui numr ntreg, efectund suma
cifrelor sale, apoi suma cifrelor acestei sume etc.
pn cnd se obine o sum format dintr-o
singur cifr. Exemplu: n=1971, cifra de control
este 9(1+9+7+1=18, 1+8=9).

#include<iostream>
using namespace std;
int main()
{
int n,d=2,k;
cout<<"n=";cin>>n;
while(n!=1)
{
if(n%d==0)
{
k=0;
while(n%d==0)
{
k++;
n=n/d;
}
cout<<d<<" ^ "<<k<<" ";
}
d++;
}

30. Enunul problemei


Se citete de la tastatur un numr n. S se
descompun numrul n factori primi. Exemplu:
n=45, se afieaz 3 ^ 2, 5 ^ 1.

11

Enunul problemei
Se citesc de la tastatur mai multe numere pn
la lntlnirea valorii 0. S se calculeze i s se
afieze pe ecran numrul de cuburi perfecte citite.
Exemplu: dac se citesc numerele 25, 64, 12,
343, 255, 729, 0, atunci pe ecran se va afia 3,
deoarece sunt trei numere cuburi perfecte (64,
343, 729).

#include<iostream>
using namespace std;
int main()
{
int n,y,k=0;
cout<<"n=";cin>>n;
while(n)
{
y=pow(n,(float)1/3);
if(y*y*y==n)
k++;
cout<<"n=";cin>>n;
}
cout<<k;
}

#include<iostream>
using namespace std;
int main()
{
int n,d=2,k;
cout<<"n=";cin>>n;
while(n!=1)
{
while(n%d==0)
{
k=d;
n=n/d;
}
d++;
}
cout<<k;
}

Enunul problemei
Scriei un program care citete de la tastatur o
valoare natural nenul n i afieaz pe ecran cel
mai mare divizor prim al numrului n. Exemplu:
n=45, se afieaz 5; n=105, se afieaz 7.

Enunul problemei
Scriei un program care citete de la tastatur o
valoare natural nenul n i afieaz pe ecran, n
ordine descresctoare,divizorii proprii ai numrului
n. Exemplu: n=24, se afieaz 12, 8, 6, 4, 3, 2.

#include<iostream>
using namespace std;
int main()
{
int n,d;
cout<<"n=";cin>>n;
for(d=n/2;d>=2;d--)
if(n%d==0)
cout<<d<<" ";
}

#include<iostream>
using namespace std;
int main()
{
int a,b,i,sa,s,c;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
c=a;
while(c>9)
{

Enunul problemei
Fie perechea de valori a,b reprezentnd limitele
unui interval de numere naturale. Afiai valorile
din intervalul [a,b] cu proprietatea c au aceeai
cifr de control cu a.

12

sa=0;
while(c)
{
sa=sa+c%10;
c=c/10;
}
c=sa;
}
for(i=a+1;i<=b;i++)
{c=i;
while(c>9)
{
s=0;
while(c)
{
s=s+c%10;
c=c/10;
}
c=s;
}
if(s==sa)
cout<<i<<" ";
}
}

#include<iostream>
using namespace std;
int main()
{
int n,s,d,k=0;
cout<<"n=";cin>>n;
while(n)
{
s=1+n;
for(d=2;d<=n/2;d++)
if(n%d==0)
s=s+d;
if(n==s-1)
k++;
cout<<"n=";cin>>n;
}
cout<<k;
}

35. Enunul problemei


S se scrie un program care citeste mai multe
numere ntregi, pn la citirea numrului 0 i
calculeaz suma tuturor divizorilor fiecrui numr.
Pe baza acestei valori s se contorizeze numerele
prime citite. De exemplu: dac se citesc numerele
5, 24, 13, 48, 19, 26, 0, se afieaz valoarea 3
deoarece sunt trei numere prime n ir (5, 13, 19).

36. Enunul problemei


Se citete de la tastatur un numr real pozitiv x
care are cel mult dou cifre la partea ntreag i
cel mult apte cifre dup punctul zecimal. Scriei
un program care afieaz pe ecran, separate
printr-un spaiu, dou numere naturale al cror
raport este egal cu x i a cror diferen absolut
este minim. Exemplu: dac se citete de la
tastatur numrul 0.375 se vor afia pe ecran
numerele 3 8.

#include<iostream>
using namespace std;
int main()
{
float x;
int i,j,a,b,r;
cout<<"x=";cin>>x;
i=x*10000000;
j=10000000;
a=i;b=j;
while(j!=0)
{
r=i%j;
i=j;
j=r;
}

13

cout<<a/i<<" "<<b/i;
}

#include<iostream>
using namespace std;
int main()
{
int x,uc,ok=1;
cout<<"x=";cin>>x;
while(x && ok==1)
{
uc=x%10;x=x/10;
if(uc<x%10)
ok=0;
}
if(ok!=0)
cout<<"DA!";
else
cout<<"NU!";
}

Enunul problemei
Un numr este bine ordonat cresctor dac are
toate cifrele n ordine strict cresctoare de la
stnga la dreapta. Verificai proprietatea de bine
ordonat cresctor pentru un numr x citit de la
tastatur.

Enunul problemei
Se citete de la tastatur un numr natural n(n>2).
S se afieze pe ecran cel mai mare numr prim
mai mic dect suma divizorilor proprii ai numrului
n. Exemplu: n=24, suma divizorilor proprii este 35
(2+3+4+6+8+12=35). Cel mai mare numr prim
mai mic dect 35 este 31.

#include<iostream>
using namespace std;
int main()
{
int n,s=0,ok=0,d,a;
cout<<"n=";cin>>n;
for(d=2;d<=n/2;d++)
if(n%d==0)
s=s+d;
if(s==0)
a=n-2;
else
if(s%2==0)
a=s-1;
else
a=s-2;
while(ok==0)
{
ok=1;
for(d=2;d<=a/2 && ok==1;d++)
if(a%d==0)
ok=0;
if(ok==0)
a=a-2;
}
cout<<a;
}

#include<iostream>
using namespace std;
int main()
{
int n,cmax,nr=0;
cout<<"n=";cin>>n;
while(n)
{
cmax=0;
while(n)
{

Enunul problemei
Se citesc de la tastatur mai multe numere pn
la ntlnirea valorii 0. S se afieze pe ecran
numrul format din cifra maxim a fiecrui numr
citit. Exemplu: dac se citesc numerele 2134,
6349, 214, 319987, 0, atunci pe ecran se va afia
numrul 4949.

14

if(n%10>cmax)
cmax=n%10;
n=n/10;
}
nr=nr*10+cmax;
cout<<"n=";cin>>n;
}
cout<<nr;
}

#include<iostream>
using namespace std;
int main()
{
int n,i,x;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"x=";cin>>x;
if(x%11111==0)
cout<<x<<" ";
}
}

40. Enunul problemei


Scriei un program care citete de la tastatur o
valoare natural nenul n i apoi un ir de n
numere naturale, avnd fiecare exact 5 cifre.
Dintre cele n numere citite, programul determin
i afieaz pe ecran numerele care au toate
cifrele egale. Exemplu: n=5 si numerele 11111,
33333, 12423, 59824, 22222 se afiseaz
numerele 11111, 33333, 22222.

Enunul problemei
Scrieti un program care citeste de la tastatura un
numar natural k, (1<= k < = 9) si apoi n numere
naturale. Programul afiseaza pe ecran cate dintre
numerele citite sunt multipli ai lui k si au ultima
cifra egala cu k. Exemplu: k=3, n=5 si numerele 2,
273, 83, 123, 63 se afiseaza 3.

#include<iostream>
using namespace std;
int main()
{
int n,k,c=0,i,x;
cout<<"n=";cin>>n;
cout<<"k=";cin>>k;
for(i=1;i<=n;i++)
{
cout<<"x=";cin>>x;
if(x%k==0 && x%10==k)
c++;
}
cout<<c;
}

#include<iostream>
using namespace std;
int main()
{
int n,i,x,y;
cout<<"n=";cin>>n;
for(i=1;i<n;i++)
{
x=i;y=n;
while(x!=y)
{
if(x>y)
x=x-y;
else
y=y-x;
}
if(x==1)
cout<<i<<" ";
}
}

Enunul problemei
Dou numere sunt prime ntre ele dac cel mai
mare divizor comun al lor este 1. Scriei un
program care citete de la tastatur un numr
natural n i afieaz toate numerele mai mici i
prime cu el. Exemplu:pentru n=10 se afieaz 1,
3, 7, 9.

15

#include<iostream>
#include<limits.h>
using namespace std;
int main()
{
int n,i,k=0;
float x,max,min;
cout<<"n=";cin>>n;
max=INT_MIN;
min=INT_MAX;
for(i=1;i<=n;i++)
{
cout<<"x=";cin>>x;
if(x>max)
max=x;
if(x<min)
min=x;
if(x<5)
k++;
}
cout<<max<<" "<<min<<" ";
cout<<k<<" corigent/i";
}

Enunul problemei
Se citesc mediile a n elevi, ca numere reale. S
se afieze cea mai mare i cea mai mic medie.
S se verifice dac sunt corigeni. Exemplu :
pentru n=4 i mediile 9.50 4.25 9.66 6.33, se
afieaz max=9.66, min=4.25, 1 corigent.

#include<iostream>
using namespace std;
int main()
{
int ogl,k,c,x,i,a,b,urma;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
for(i=a;i<=b;i++)
{
c=i;ogl=0;k=0;
while(c)
{
ogl=ogl*10+c%10;
k++;
c=c/10;
}
urma=(pow(10,double(k))-1)-i;
if(urma==ogl)
{
cout<<"urma:"<<urma<<" ";
cout<<"ogl:"<<ogl<<" ";
cout<<"numarul:"<<i<<" "<<endl;
}
}
}

Enunul problemei
Se dau dou numere a i b. S se afieze toate
numerele curate din intervalul [a,b]. Un numr
este curat dac urma sa (valoarea obtinut prin
diferena dintre numrul cu attea cifre de 9 cte
cifre are x i numrul x) este egal cu oglinditul
su.

#include<iostream>
using namespace std;
int main()
{
int a,b,x,y;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
x=a;y=b;
while(x!=y)
if(x>y)

45. Enunul problemei


Se citesc de la tastatur numrtorul i numitorul
unei fracii. S se afieze pe ecran fracia
simplificat sau mesajul "Fracie ireductibil" n
cazul n care nu se poate simplifica.

16

x=x-y;
else
y=y-x;
if(x==1)
cout<<"Fractie ireductibila!";
else
cout<<a/x<<" "<<b/x;
}

#include<iostream>
using namespace std;
int main()
{
int n,i,d,y,k=1;
cout<<"n=";cin>>n;
for(i=1;k<=n;i++)
{
y=2;
for(d=2;d<=i/2;d++)
if(i%d==0)
y++;
if(y==3)
{cout<<i<<" ";k++;}
}
}

Enunul problemei
S se scrie un program care afieaz pe ecran
primele n numere care au exact trei divizori.
Exemplu: n=5, se afieaz 4, 9, 25, 49, 121.

#include<iostream>
using namespace std;
int main()
{
int n,k,x,p,i,mijl,nr;
cout<<"n=";cin>>n;
x=n;k=0;
while(x)
{k++;x/=10;}
if(k%2==0)
mijl=k/2;
else
mijl=k/2+1;
i=1;p=1;nr=0;
while(n)
{
if(i==mijl)
if(k%2==0)
{n=n/100;i=i+2;}
else
{n=n/10;i=i+1;}
nr=nr+p*(n%10);
p=p*10;i++;n=n/10;
}
cout<<nr;
}

Enunul problemei
Se citete un numr cu n cifre (n<=9). S se
determine numrul obinut prin eliminarea cifrei /
cifrelor din mijloc. Exemplu: n=12345, se afieaz
1245; n=123456, se afieaz 1256.

Enunul problemei
S se afieze n ordine descresctoare numerele
ce se termin n cifra c din intervalul [a, b] dat.
Exemplu: a=10, b=100, c=3, se afieaz 93 83 73
63 53 43 33 23 13.

17

#include<iostream>
using namespace std;
int main()
{
int a,b,c,i;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;

cout<<"c=";cin>>c;
for(i=b;i>=a;i--)
{
if(i%10==c)
cout<<i<<" ";
}
}

cout<<"Numarul "<<c<<" are ";


cout<<kn<<" divizori."<<endl;
int ok=1;
for(i=c-1;i>=2;i--)
{
ki=1;d=2;
while(d<=i)
{
if(i%d==0)
ki++;
d++;
}
if(kn<ki)
{
cout<<"Numarul nu este puternic";
cout<<" deoarece "<<i<<" are ";
cout<<ki<<" divizori.";ok=0;
break;
}
}
if(ok==1)
{
cout<<"Numarul "<<c;
cout<<" este puternic."; }

Enunul problemei
Numerele puternice sunt acele numere naturale
care au numrul divizorilor mai mare dect
numrul divizorilor oricrui numr natural mai mic
dect numrul respectiv. Scriei un program care
verific dac un numr n este puternic.
#include<iostream>
using namespace std;
int main()
{
int n,i,kn=1,ki,c,d=2;
cout<<"n=";cin>>n;
c=n;
while(d<=n)
{
if(n%d==0)
kn++;
d++;
}
}

50. Enunul problemei


Un numr natural are aspect de munte, dac
cifrele sale sunt n ordine cresctoare pn la
mijlocul numrului i n ordine descresctoare
ncepnd cu acea poziie. Exemplu:12321,
345754 sunt numere cu aspect de munte. Pentru
un numr natural n citit de la tastatur, s se
verifice dac are aspect de munte, afindu-se un
mesaj corespunztor.
#include<iostream>
using namespace std;
int main()
{
int n,c=0,x,mijl,ok,i,uc;
cout<<"n=";cin>>n;
x=n;
while(x)
{c++;x/=10;}
if(c%2==0) mijl=c/2;
else mijl=c/2+1;

ok=1;uc=n%10;
for(i=0;i<=mijl && ok==1;i++)
{
n=n/10;
if(uc>n%10) ok=0;
}
if(ok==1)
{
uc=n%10;
for(i=c-mijl;i>0 && ok==1;i--)
{
n=n/10;
if(uc<n%10)
ok=0;
}
if(ok==1)
cout<<"aspect de munte";
else
cout<<"nu are aspect de munte";
}
else
cout<<"nu are aspect de munte";

}
********************************************************************************

18

#include<iostream>
using namespace std;
int main()
{
int a,b,c,d,m,k=0;;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
cout<<"c=";cin>>c;
m=a;
if(b<m) m=b;
if(c<m) m=c;
for(d=1;d<=m/2;d++)
if(a%d==0 and b%d==0 and c%d==0)
{cout<<d<<" ";k++;}
if(a%m==0 and b%m==0 and c%m==0)
{cout<<m;k++;}
cout<<endl;
cout<<k<<" divizori.";

Enunul problemei
Se citesc de la tastatur trei numere naturale a, b
i c. S se scrie un program care afiseaz pe
ecran divizorii comuni tuturor celor trei numere i
numrul lor.Exemplu: a=36, b=24, c=48, se
afieaz 1, 2, 3, 4, 6, 12 i 6 divizori.

#include<iostream>
using namespace std;
int main()
{
long n;
int p=1;
cout<<"n=";cin>>n;
n=n/10;
while(n/p>9)
p=p*10;
n=n%p;
cout<<n;
}

Enunul problemei
Fie n un numr natural cu cel mult 9 cifre, citit de
la tastatur. S se afieze numrul fr prima i
ultima cifr. Exemplu: n=12345, se afieaz 234.

#include<iostream>
using namespace std;
int main()
{
int n,a,b,x,i,ok,y;
cout<<"n=";cin>>n;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
a=a*10+b;
for(i=1;i<=n;i++)
{
cout<<"x=";cin>>x;
y=x;ok=0;
while(x && ok==0)
{
if(x%100==a)
ok=1;
x=x/10;
}
if(ok==1)
cout<<y<<" ";
}
}

Enunul problemei
Se citesc de la tastatur dou cifre a i b, un
ntreg n, precum i un ir de n numere ntregi. S
se afieze acele elemente ale irului care au n
componena lor succesiunea de cifre ab.
Exemplu: a=3,b=5, n=5 i irul 2358, 3750, 351,
12335,177 se vor afia numerele 2358,351 i
12335.

19

54.
#include<iostream>
using namespace std;
int a,b,q,w,i,ok;
int main()
{
cout<<"###############################################"<<endl;
cout<<"1.Exista numere palindrom in intervalul [a,b]?#"<<endl;
cout<<"2.Cate valori din intervalul [a,b] se divid cu#"<<endl;
cout<<"cmmdc(a,b)?
#"<<endl;
cout<<"###############################################"<<endl;
cout<<endl;
int q=1;
cout<<"Precizati intervalul:"<<endl;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
while(q==1)
{
int w;
cout<<"Ce operatie doriti sa efectuati?"<<endl;
cout<<"Introduceti 1 sau 2"<<endl;
cout<<"Operatia:";cin>>w;
switch (w)
{
case 1:{ int ogl,x;
ok=0;
for(i=a;i<=b && ok==0;i++)
{
x=i;ogl=0;
while(x)
{
ogl=ogl*10+x%10;
x=x/10;
}
if(ogl==i)
ok=1;
}
if(ok==1)
{cout<<"In intervalul ["<<a<<","<<b<<"]"<<endl;
cout<<"SUNT numere palindrom."<<endl;}
else
{cout<<"In intervalul ["<<a<<","<<b<<"]"<<endl;
cout<<"NU SUNT numere palindrom."<<endl;}
}break;
case 2:{ int k=0,x,y;
x=a;y=b;
while(x!=y)
if(x>y)
x=x-y;
else
y=y-x;
cout<<"CMMDC(a,b) este "<<x<<" ."<<endl;

20

for(i=a;i<=b;i++)
if(i%x==0)
k++;
cout<<"In intervalul ["<<a<<","<<b<<"]"<<endl;
cout<<"sunt "<<k<<" valori care"<<endl;
cout<<"se divid cu cmmdc(a,b)."<<endl;
}break;
default: cout<<"Puteti sa introduceti doar numerele 1 sau 2!"<<endl;
}
cout<<"Doriti sa efecuati o alta operatie?"<<endl;
cout<<"Introduceti 1 pentru DA si orice alt numar pentru NU."<<endl;
cout<<"Optiunea:";cin>>q;
}
}

21

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