Răspuns :
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.