Fiind dat un număr natural, efectuând suma pătratelor cifrelor numărului dat, apoi repetând însumarea pătratelor cifrelor pentru numerele obţinute ca rezultat, la un moment dat se obţine una dintre valorile 1
sau 4
.
De exemplu, pentru numărul natural 89
, se obţin, pe rând, valorile 145
, 42
, 20
, 4
iar pentru numărul natural 86
, valorile rezultate sunt 100
, 1
.
Cerința
Dat un set de numere naturale, să se determine pentru fiecare dintre ele, numărul de repetări ale calculului sumei pătratelor cifrelor până la obţinerea rezultatului 1
sau 4
.
Date de intrare
Fişierul de intrare unupatru.in
conţine pe prima linie o valoare naturală n
, care reprezintă numărul de numere naturale care vor fi testate. Pe linia a doua a fişierului de intrare se găsesc cele n numere naturale, separate prin câte un spaţiu.
Date de ieșire
Fişierul de ieşire unupatru.out
conţine pe prima linie n numere naturale, care indică, în ordinea din fişierul de intrare, numărul de repetări ale calculului pentru fiecare dintre cele n
numere din fişierul de intrare.
Restricții și precizări
1 <= n <= 10
1 <=
numerele testate<= 10
18
Exemplul 1:
unupatru.in
2 89 68
unupatru.out
4 2
Explicație
Se obţin, pe rând, pentru 89
, valorile 145 42 20 4
Se obţin, pe rând, pentru 68
, valorile 100 1
Exemplul 2:
unupatru.in
3 33 17 638
unupatru.out
10 9 5
Explicație
Valorile obţinute pentru cele 3 valori sunt:
18 65 61 37 58 89 145 42 20 4
50 25 29 85 89 145 42 20 4
109 82 68 100 1
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema UnuPatru:
//marinel serban - ianuarie 2013
#include <fstream>
using namespace std;
ifstream fin("unupatru.in");
ofstream fout("unupatru.out");
int n, i, nr_op, uc;
long long x, s2;
int main()
{
fin >> n; //numarul de numere
for (i = 1; i <= n; i++) //pentru fiecare numar
{
fin >> x; //il citesc in x
nr_op = 0; //initializez numarul de operatii
while (x != 1 && x != 4) //cat timp nu am obtinut 1 sau 4
{
s2 = 0; //initializez suma patratelor cu 0
nr_op++; //contorizez calculul
while (x) //cat timp mai exista cifre in x
{
uc = x % 10; //scot ultima cifra
s2 += uc * uc; //adun patratul cifrei
x /= 10; //scap de ea
}
x = s2; //s2 este noul x
}
if (i < n) //daca i < n nr_op trebuie urmat de spatiu
fout << nr_op << ' ';
else
fout << nr_op << '\n'; //altfel (ultimul numar) se termina cu '\n'
}
fout.close();
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2099 UnuPatru
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2099 UnuPatru de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!