0994 - Fibo Verif 1

De la Universitas MediaWiki

Cerinţa

Se consideră şirul Fibonacci, definit astfel: f1=1, f2=1, respectiv fn=fn-1+fn-2, dacă n>2.

Se dă un şir cu n elemente, numere naturale. Să se afişeze elementele şirului care sunt termeni ai şirului lui Fibonacci.

Se va defini şi apela o funcţie fibo care verifică dacă un număr natural, transmis ca parametru, face parte din şirul lui Fibonacci.

Date de intrare

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

Date de ieşire

Pe prima linie a fişierului fiboverif2.txt se vor afla elementele şirului dat care sunt termeni ai şirului lui Fibonacci, separaţi prin exact un spaţiu.

Restricţii şi precizări

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

Exemplul 1

fiboverif1.txt:

8

13 1 8 24 21 55 47 8

fiboverif2.txt:

13 1 8 21 55 8

Exemplul 2

fiboverif1.txt:

0

13 1 8 24 21 55 47 8 9

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

Rezolvare

def validate_input(n, sir):
    # Verificare pentru n
    if not (1 <= n <= 10):
        print("Numărul n trebuie să fie între 1 și 10.")
        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 9 cifre.")
            return False

    return True

def fibo(numar):
    a, b = 0, 1
    while a <= numar:
        if a == numar:
            return True
        a, b = b, a + b
    return False

def main():
    # Citire date de intrare din fisier
    with open("fiboverif1.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

    # Afișare elemente din șir care sunt termeni ai șirului lui Fibonacci
    rezultat = [str(x) for x in sir if fibo(x)]

    # Scriere rezultat in fisier
    with open("fiboverif2.txt", "w") as f:
        f.write(" ".join(rezultat))

if __name__ == "__main__":
    main()