Se citește un șir de n numere naturale de maxim 9 cifre fiecare, să se afișeze numărul cu suma
cifrelor maximă/minimă.
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using namespace std;
// Algoritmul de determinare al sumei cifrelor in mod recursiv
int cifre(unsigned int x)
{
if(x==0)
return 0;
else
return cifre(x/10)+x%10;
}
int main()
{
unsigned int n, x, suma_max=0, nr_max=0, suma_min=32000, nr_min=0;
cin>>n;
while(n!=0)
{
cin>>x;
if( suma_max<cifre(x) )
{
suma_max=cifre(x);
nr_max=x;
}
if(suma_min>cifre(x))
{
suma_min=cifre(x);
nr_min=x;
}
n--;
}
cout<<"numar maxim: "<<nr_max<<" // numar minim: "<<nr_min;
}
Explicație:
In timpul citirii fiecarui numar voi salva valoarea sumei cifrelor sale si numar insusi.
Pentru a determina numarul cu suma cifrelor maxima voi folosi prima instructiune "if". Am declarat variabila "suma_max" ca avand valoarea 0. Daca suma_max este mai mica decat suma primei cifre din sir atunci suma_max va primi valoarea sumei primei cifre.
De exemplu:
n=5
am sirul: 13 12 15 17 1
suma_max=0
citesc x=13
daca 0<4 ( suma cifrelor numarul 13 este 4 --> [ 1 + 3 ] ) ADEVARAT
{ suma_max=4
nr_max=13}
citesc 12 --> ( suma 3 )
daca 4<3 FALS
citesc 15 ( suma 6 )
daca 4 < 6 ADEVARAT
{ suma_max=6;
nr_max=15}
citesc 17 ( suma 8 )
daca 6<8 ADEVARAT
{ suma_max=8
nr_max=17}
citesc 1
Daca 8 < 1 FALS
Prin urmare voi avea numarul 17 ca fiind numarul cu suma cifrelor maxima.
ACELASI PRINCIPIU SE APLICA SI PENTRU NUMARUL MINIM, cu exceptia ca este fix invers. Memorez astfel incat sa ajung la numarul cu suma cifrelor minima din sir.
Pentru a intelege programul sugerez sa faci pe hartie cu calm.
Programul este eficient din punct de vedere al spatiului intrucat nu folosesc vectori pentru a memora sirul si timpului de executare deoarece sunt folosite putine variabile, iar efectuarea determinarii numerelor minim si maxim se face in timpul citirii ceea ce ofera un plus timpului de executare.