0424 - Fibonacci generalizat
Context
Se consideră şirul Fibonacci generalizat, definit astfel: f1=a, f2=b, fk=fk-1+fk-2, dacă k > 2, unde a, b ∈ ℤ.
Cerinţa
Se dă un număr natural termen_maxim și două numere întregi termen1 și termen2. Să se afişeze în ordine termenii şirului lui Fibonacci generalizat cu valoarea absolută mai mică sau egală cu termen_maxim.
Date de intrare
Programul citește de la tastatură numerele termen1, termen2 si termen_maxim.
Date de ieșire
Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse.", urmat, pe rândul următor, programul afișează pe ecran termenii determinați, separați prin câte o virgulă și un spaţiu. În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, programul va afișa "Datele de intrare nu corespund restricțiilor impuse.".
Restricţii şi precizări
- numar_elemente ∈ ℕ
- 1 ⩽ termen_maxim ⩽ 500.000.000
- termenii se vor afișa în ordinea: f1, f2, f3, ...
Exemplu
- Intrare
- -1
- 2
- 40
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- -1, 2, 1, 3, 4, 7, 11, 18, 29
- Intrare
- 3
- 5
- abc
- Ieșire
- Datele introduse nu corespund restricțiilor impuse.
- Intrare
- 0
- 0
- 0
- Ieșire
- Datele introduse nu corespund restricțiilor impuse.
Rezolvare
Rezolvare ver. 1
# 0424 - Fibonacci Generalizat
def validare_date_termen_maxim(numar):
if numar.isdigit():
if 1 <= int(numar) <= 500_000_000:
return True
else:
return False
else:
return False
def validare_date_termeni(termen1, termen2):
all_int = True
if not isinstance(termen1, str) and not isinstance(termen2, str):
all_int = False
else:
try:
int(termen1)
int(termen2)
except ValueError:
all_int = False
return all_int
def fibonacci_generalizat(termen1, termen2, termen_maxim):
fibo1 = termen1
fibo2 = termen2
fibo3 = fibo1 + fibo2
if termen_maxim >= 1:
print(fibo1, fibo2, sep=", ", end=", ")
while(abs(fibo3) < termen_maxim):
fibo1, fibo2 = fibo2, fibo3
if fibo1 + fibo2 > termen_maxim:
print(fibo3)
else:
print(fibo3, end=", ")
fibo3 = fibo2 + fibo1
if __name__ == "__main__":
termen1 = input()
termen2 = input()
termen_maxim = input()
if validare_date_termeni(termen1, termen2):
termen1, termen2 = int(termen1), int(termen2)
if validare_date_termen_maxim(termen_maxim):
termen_maxim = int(termen_maxim)
print("Datele de intrare corespund restricțiilor impuse.")
fibonacci_generalizat(termen1, termen2, termen_maxim)
else:
print("Datele de intrare nu corespund restricțiilor impuse.")
else:
print("Datele de intrare nu corespund restricțiilor impuse.")