0994 - Fibo Verif 1
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.in se află numărul n, iar pe a doua linie n numere naturale.
Date de ieşire
Pe prima linie a fişierului fiboverif1.out 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
9cifre
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
<syntaxhighlight lang="python3" line="1"> 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()
</syntaxhighlight>