Imi puteti spune va rog unde m-am incurcat?
Textul problemei: Sa se afiseze toate nr nat mai mici sau egale decat n care au suma cifrelor un nr impar.
#include <iostream>
using namespace std;
int main()
{
int x;
int S;
int n;
int z;
cin>>n;
x=1;
S=0;
while (x<=n)
{
z=x;
while ( 0<z )
{
S=S+z%10;
z=z/10;
}
if(S%2==1)
{
cout<<x<<" ";
}
x=x+1;
}
return 0;
}
Răspunsuri la întrebare
Raspuns :
Asa cum a propus si utilizatorul Razzy in comentariu, variabila S trebuie initializata de fiecare data cu 0 la fiecare iteratie a lui X.
Astfel vom muta instructiunea "S = 0;" la inceputul blocului de instructiuni determinat de while.
Cod modificat :
#include <iostream>
using namespace std;
int main()
{
int x=1,S,n,z; //Declararea variabilelor pe un singur rand, nu este necesara dar ajuta la lizibilitate
cin >> n;
while (x <= n)
{
S = 0; //Rezolvare problema. S trebuie initializat cu 0 la fiecare iteratie a lui x
z = x;
while (0 < z)
{
S += z % 10; //Schimbarea aceasta nu e necesara dar e recomandata
z /= 10; //Schimbarea aceasta nu e necesara dar e recomandata
}
if (S % 2 == 1)
{
cout << x << " ";
}
++x; //Schimbarea nu e necesara dar este recomandata.
}
return 0;
}
Nota :
Modul in care scriem cod conteaza ! Am mai modificat cateva elemente pentru a imbunatati lizibilitatea si eficienta programului. Aceste modificari nu sunt necesare dar sunt recomandate pentru ca promoveaza scrierea de cod optim, usor de mentinut.
O alta recomandare ar fi sa dam un nume sugestiv variabilelor :
- In loc de "S" vom folosi "suma_cifre"
- In loc de "x" vom folosi "iterator"
- In loc de "z" vom folosi "copie" sau "temporar"
As recomanda si utilizarea functiilor daca ai parcurs si materia aferenta acestui capitol.