1001 - Rotund

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Spunem că un număr natural x este rotund dacă există un număr natural nenul k, mai mic strict decât numărul de cifre ale lui x, astfel încât prin permutarea circulară a cifrelor numărului cu k poziţii la dreapta, să se obţină numărul iniţial x.

Se dă un şir cu n elemente, numere naturale. câte elemente din șir sunt rotunde, și care sunt acestea.

Se va defini şi apela subprogramul rotund care verifică dacă un număr natural, transmis ca parametru, este rotund.

Date de intrare[edit | edit source]

Pe prima linie a fişierului rotundIN.txt se află numărul n, iar pe a doua linie n numere naturale.

Date de ieşire[edit | edit source]

Prima linie a fişierului rotundOUT.txt va conține numărul de elemente rotunde din șirul dat, iar linia a doua aceste elemente, în ordinea din șirul dat, separate prin exact un spațiu. Dacă în șirul dat nu se află numere rotunde, în fișierul de ieșire se va numai scrie valoarea 0.

Restricţii şi precizări[edit | edit source]

  • 1 ≤ n ≤ 50
  • elementele şirului vor avea cel mult 10 cifre

Exemplul 1[edit | edit source]

rotundIN.txt:

5

12 3232 123 144144 77

rotundOUT.txt:

3

3232 144144 77

Exemplul 2[edit | edit source]

rotundIN.txt:

0

12 3232 123 144144 77

Output consola: Numărul n trebuie să fie între 1 și 50.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def validate_input(n, sir):

   # Verificare pentru n
   if not (1 <= n <= 50):
       print("Numărul n trebuie să fie între 1 și 50.")
       return False
   # Verificare pentru fiecare element din șir
   for x in sir:
       if not (1 <= x <= 999999999):
           print("Elementele șirului trebuie să fie numere naturale cu cel mult 10 cifre.")
           return False
   return True

def rotund(numar):

   str_numar = str(numar)
   numar_cifre = len(str_numar)
   for i in range(1, numar_cifre):
       permutare = int(str_numar[-i:] + str_numar[:-i])
       if permutare == numar:
           return True
   return False

def main():

   # Citire date de intrare din fisier
   with open("rotundIN.txt", "r") as f:
       n = int(f.readline())
       sir = list(map(int, f.readline().split()))
   # Verificare validitate input
   if not validate_input(n, sir):
       return
   # Identificare și afișare elemente rotunde din șir
   rotunde = [x for x in sir if rotund(x)]
   numar_rotunde = len(rotunde)
   # Scriere rezultat in fisier
   with open("rotundOUT.txt", "w") as f:
       f.write(str(numar_rotunde) + "\n")
       if numar_rotunde > 0:
           f.write(" ".join(map(str, rotunde)))

if __name__ == "__main__":

   main()

</syntaxhighlight>