VA ROG MUULTTT 50PCT
Se introduce de la tastatură un şir de numere naturale, până la citirea numărului
0. Să se afişeze toate tripletele de numere introduse consecutiv care au proprietatea că al doilea şi al treilea număr sunt egale cu câtul, respectiv cu restul dintre
împărțirea primului număr la suma cifrelor sale.
Răspunsuri la întrebare
Program in pseudocod:
vezi poza
\\(*numar) sunt comentarii, nu trebuie sa fie incluse in program
Program
#include <iostream>
using namespace std;
int x, a[100], i, s, y, k;
int main ()
{
while (cin >> x && x != 0) { //(*1)
i++;
a[i] = x; //(*2)
}
for (k = 3; k <= i; k++) { //(*3)
y = a[k-2]; //(*4)
s = 0; //(*5)
while (y > 0) {
s = s + y%10; //(*6)
y = y/10;
}
if (a[k-1] == a[k-2]/s && a[k] == a[k-2]%s) cout << "(" << a[k-2] << ", " << a[k-1] << ", " << a[k] << "); "; //(*7)
}
return 0;
}
Comentarii:
(*1) se citesc numerele cat timp exista si sunt diferite de 0
(*2) se pastreaza numerele citite intr-un vector, iar in final i ne va da si numarul de numere din vector
(*3) incepe algoritmul propriu-zis; parcurgem elementele din a de la pozitia 3 la pozitia k; in aceasta etapa se verifica daca tripletul a[k-2], a[k-1] si a[k] respecta cerinta
(*4) i se atribuie variabilei y valoarea lui a[k-2]; va fi nevoie sa modificam valoarea numarului ca sa-i aflam suma cifrelor si nu vrem sa-i pierdem valoarea lui a[k-2], asa ca ne folosim de variabila y pentru asta
(*5) se initializeaza suma cifrelor cu 0
(*6) se calculeaza suma cifrelor lui y in s, y%10 fiind ultima cifra a lui y
(*7) daca succesorul lui a[k-2], adica a[k-1]=a[k-2]/s=catul la impartirea lui a[k-2] la s si succesorul lui a[k-1], adica a[k]=a[k-2]%s=restul la impartirea lui a[k-2] la s, se afiseaza tripletul a[k-2], a[k-1], a[k].
EXEMPLE
se citeste sirul: 15 3 3 67 5 3 67 5 2 137 12 5 0 67 5 2
se afiseaza: (67, 5, 2); (137, 12, 5);
se citeste sirul: 15 0 3 3 67 5 3 67 5 2 137 12 5 67 5 2
se afiseaza: (nimic)
se citeste sirul: 205 29 2 7 0
se afiseaza: (205, 29, 2); (29, 2, 7);