Informatică, întrebare adresată de whow, 8 ani în urmă

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ă.​


andriesboss92: Ai invatat subprograme?
whow: da

Răspunsuri la întrebare

Răspuns de andriesboss92
4

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.


whow: Nu era necesar atat explicatie.Eu cad dadeam run la codu meu facea si suma primului nr si o aduna cu al doilea nr
whow: Dar apreciez
andriesboss92: Poate tie nu iti sunt necesare explicatiile insa sunt si alte persoane care pot avea aceeasi problema ca tine si ii poate ajuta =)
Alte întrebări interesante