0424 - Fibonacci generalizat
Context[edit | edit source]
Se consideră şirul Fibonacci generalizat, definit astfel: f1=a, f2=b, fk=fk-1+fk-2, dacă k > 2, unde a, b ∈ ℤ.
Cerinţa[edit | edit source]
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[edit | edit source]
Programul citește de la tastatură numerele termen1, termen2 si termen_maxim.
Date de ieșire[edit | edit source]
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[edit | edit source]
- numar_elemente ∈ ℕ
- 1 ⩽ termen_maxim ⩽ 500.000.000
- termenii se vor afișa în ordinea: f1, f2, f3, ...
Exemplu[edit | edit source]
- 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[edit | edit source]
Rezolvare ver. 1[edit | edit source]
<syntaxhighlight lang="python" line>
- 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.")
</syntaxhighlight>