2099 - Unu Patru

From Bitnami MediaWiki

Sursa: [1]

Enunt[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

1 <= n <= 10 1 <= numerele testate <= 1018

Exemplul 1:[edit | edit source]

unupatru.in

2 89 68 unupatru.out

4 2

Explicație[edit | edit source]

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:[edit | edit source]

unupatru.in

3 33 17 638 unupatru.out

10 9 5

Explicație[edit | edit source]

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

Încărcare soluție[edit | edit source]

<syntaxhighlight lang="python" line> def sum_of_squares(n):

   # Calculează suma pătratelor cifrelor numărului n
   return sum(int(digit)**2 for digit in str(n))

def count_iterations(n):

   # Calculează numărul de repetări necesare pentru a ajunge la 1 sau 4
   if n == 1 or n == 4:
       return 1
   else:
       return 1 + count_iterations(sum_of_squares(n))
  1. Citim numărul de teste

with open("unupatru.in", "r") as f:

   n = int(f.readline())
  1. Citim numerele din fișier și le prelucrăm

with open("unupatru.in", "r") as f:

   numbers = list(map(int, f.readline().split()))
  1. Calculăm numărul de repetări pentru fiecare număr și scriem rezultatele în fișier

with open("unupatru.out", "w") as f:

   for number in numbers:
       f.write(str(count_iterations(number)) + " ")

</syntaxhighlight>