1001 - Rotund

De la Universitas MediaWiki

Cerinţa

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

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

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

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

Exemplul 1

rotundIN.txt:

5

12 3232 123 144144 77

rotundOUT.txt:

3

3232 144144 77

Exemplul 2

rotundIN.txt:

0

12 3232 123 144144 77

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

Rezolvare

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()