2099 - Unu Patru: Difference between revisions

From Bitnami MediaWiki
Pop Giulia (talk | contribs)
Pagină nouă: ==Enunt== 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ăru...
 
Pop Giulia (talk | contribs)
No edit summary
 
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/2099/unupatru]
==Enunt==
==Enunt==
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.
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.

Latest revision as of 13:06, 20 May 2023

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>