1956 - Siruri 2: Difference between revisions
Sinn Erich (talk | contribs) |
Sinn Erich (talk | contribs) |
||
(13 intermediate revisions by the same user not shown) | |||
Line 20: | Line 20: | ||
== Date de intrare == | == Date de intrare == | ||
Programul | Programul conține pe prima linie un număr natural '''p'''. Pentru toate testele de intrare, numărul '''p''' poate avea doar '''valoarea 1 sau valoarea 2'''. Pe linia a doua a fișierului se găsește un număr natural '''n'''. | ||
== Date de ieșire == | == Date de ieșire == | ||
Dacă valoarea lui '''p este 1''', se va rezolva numai punctul a) din cerințe. În acest caz,programul va scrie al n-lea termen din șirul lui Fibonacci și numărul său de divizori. | |||
Dacă | Dacă valoarea lui '''p este 2''', se va rezolva numai punctul b) din cerințe. În acest caz, programul va scrie al n-lea termen din șirul lui Iccanobif și numărul său de divizori. | ||
În | Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează cerintele de mai sus. | ||
În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse." | |||
== Restricţii şi precizări == | == Restricţii şi precizări == | ||
1 ≤ '''n''' ≤ 50 | |||
Pentru rezolvarea corectă a primei cerinţe se acordă 50% din punctaj, iar pentru cerința a doua se acordă 50% din punctaj. | |||
== Exemplul 1 == | == Exemplul 1 == | ||
; | ; Datele de intrare | ||
: | :Introduceti n: | ||
; | : 1 | ||
: Datele | : 8 | ||
: | ; Datele de ieșire | ||
: Datele sunt introduse corect. | |||
: Termenul 1 din sirul lui Fibonacci este 1 si are 1 divizori. | |||
: Termenul 1 din sirul lui Iccanobif este 1 si are 1 divizori. | |||
: Termenul 8 din sirul lui Fibonacci este 21 si are 4 divizori. | |||
: Termenul 8 din sirul lui Iccanobif este 39 si are 4 divizori. | |||
<br> | <br> | ||
== Exemplul 2 == | |||
; Datele de intrare | |||
: Introduceti n: | |||
: 2 | |||
: 9 | |||
; Datele de ieșire | |||
: Datele sunt introduse corect. | |||
: Termenul 2 din sirul lui Fibonacci este 1 si are 1 divizori. | |||
: Termenul 2 din sirul lui Iccanobif este 1 si are 1 divizori. | |||
:Termenul 9 din sirul lui Fibonacci este 34 si are 4 divizori. | |||
:Termenul 9 din sirul lui Iccanobif este 124 si are 6 divizori. | |||
<br> | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# | #1956 | ||
def | def rasturnat(n): | ||
return int(str(n)[::-1]) | |||
def numar_divizori(n): | |||
cnt = 0 | |||
for i in range(1, n+1): | |||
if n % i == 0: | |||
cnt += 1 | |||
return cnt | |||
def | def fibonacci(n): | ||
if n <= 2: | |||
return 1 | |||
return fibonacci(n-1) + fibonacci(n-2) | |||
return | |||
def iccanobif(n): | |||
if n <= 2: | |||
return 1 | |||
return rasturnat(iccanobif(n-1)) + rasturnat(iccanobif(n-2)) | |||
def | def validate_input(n): | ||
if n < | if not (1 <= n <= 50): | ||
return False | return False | ||
return True | return True | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
n = int(input(" | n = int(input("Introduceti n: ")) | ||
if not | if not validate_input(n): | ||
print("Datele | print("Datele nu corespund restricțiilor impuse.") | ||
else: | else: | ||
print("Datele sunt introduse corect.") | |||
print("Termenul", n, "din sirul lui Fibonacci este", fibonacci(n), "si are", numar_divizori(fibonacci(n)), "divizori.") | |||
print("Termenul", n, "din sirul lui Iccanobif este", iccanobif(n), "si are", numar_divizori(iccanobif(n)), "divizori.") | |||
print( | |||
</syntaxhighlight> | |||
'''Explicatie cod:''' | |||
Această bucată de cod calculează termenii n din șirurile lui Fibonacci și Iccanobif și numărul lor de divizori, și adaugă o funcție de validare care verifică dacă input-ul este între 1 și 50. | |||
Funcția rasturnat primește un număr și îl întoarce în ordine inversă, transformându-l întâi într-un șir de caractere și apoi folosind notarea cu pas negativ pentru a-l inversa. | |||
Funcția numar_divizori calculează numărul de divizori ai unui număr, numărând toate divizorii între 1 și numărul dat și returnând numărul lor. | |||
Funcția fibonacci calculează termenul n din șirul lui Fibonacci prin adunarea celor două termeni anterioare (sau 1, în cazul în care n este mai mic sau egal cu 2). | |||
Funcția iccanobif calculează termenul n din șirul Iccanobif prin adunarea răsturnatei a două termeni anterioare (sau 1, în cazul în care n este mai mic sau egal cu 2). |
Latest revision as of 07:05, 27 April 2023
Sursa: [1]
Cerinţa[edit | edit source]
Fibonacci, un celebru matematician italian din Evul Mediu, a descoperit un șir de numere naturale cu multiple aplicații, șir ce-i poartă numele:
Fibonacci(n)={1Fibonacci(n−1)+Fibonacci(n−2)dacă n=1 sau n=2 dacă n>2 Fascinat de șirul lui Fibonacci, și mai ales aplicațiile acestui șir în natură, Iccanobif, un matematician în devenire, a creat un șir si el un care-i poartă numele:
Iccanobif(n)={1răsturnat(Iccanobif(n−1))+răsturnat(Iccanobif(n−2))dacă n=1 sau n=2 dacă n>2 Obținându-se astfel șirurile:
Fibonacci: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … Iccanobif: 1, 1, 2, 3, 5, 8, 13, 39, 124, 514, 836, … Iccanobif, se întreabă acum, ce număr are mai mulți divizori numere naturale: al n-lea termen din șirul Fibonacci sau al n-lea termen din șirul său.
Scrieți un program care să citească un număr natural n și să afișeze:
a) al n-lea termen din șirul lui Fibonacci și numărul său de divizori b) al n-lea termen din șirul lui Iccanobif și numărul său de divizori
Date de intrare[edit | edit source]
Programul conține pe prima linie un număr natural p. Pentru toate testele de intrare, numărul p poate avea doar valoarea 1 sau valoarea 2. Pe linia a doua a fișierului se găsește un număr natural n.
Date de ieșire[edit | edit source]
Dacă valoarea lui p este 1, se va rezolva numai punctul a) din cerințe. În acest caz,programul va scrie al n-lea termen din șirul lui Fibonacci și numărul său de divizori.
Dacă valoarea lui p este 2, se va rezolva numai punctul b) din cerințe. În acest caz, programul va scrie al n-lea termen din șirul lui Iccanobif și numărul său de divizori.
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează cerintele de mai sus.
În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."
Restricţii şi precizări[edit | edit source]
1 ≤ n ≤ 50
Pentru rezolvarea corectă a primei cerinţe se acordă 50% din punctaj, iar pentru cerința a doua se acordă 50% din punctaj.
Exemplul 1[edit | edit source]
- Datele de intrare
- Introduceti n:
- 1
- 8
- Datele de ieșire
- Datele sunt introduse corect.
- Termenul 1 din sirul lui Fibonacci este 1 si are 1 divizori.
- Termenul 1 din sirul lui Iccanobif este 1 si are 1 divizori.
- Termenul 8 din sirul lui Fibonacci este 21 si are 4 divizori.
- Termenul 8 din sirul lui Iccanobif este 39 si are 4 divizori.
Exemplul 2[edit | edit source]
- Datele de intrare
- Introduceti n:
- 2
- 9
- Datele de ieșire
- Datele sunt introduse corect.
- Termenul 2 din sirul lui Fibonacci este 1 si are 1 divizori.
- Termenul 2 din sirul lui Iccanobif este 1 si are 1 divizori.
- Termenul 9 din sirul lui Fibonacci este 34 si are 4 divizori.
- Termenul 9 din sirul lui Iccanobif este 124 si are 6 divizori.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1956
def rasturnat(n):
return int(str(n)[::-1])
def numar_divizori(n):
cnt = 0 for i in range(1, n+1): if n % i == 0: cnt += 1 return cnt
def fibonacci(n):
if n <= 2: return 1 return fibonacci(n-1) + fibonacci(n-2)
def iccanobif(n):
if n <= 2: return 1 return rasturnat(iccanobif(n-1)) + rasturnat(iccanobif(n-2))
def validate_input(n):
if not (1 <= n <= 50): return False return True
if __name__ == '__main__':
n = int(input("Introduceti n: ")) if not validate_input(n): print("Datele nu corespund restricțiilor impuse.") else: print("Datele sunt introduse corect.") print("Termenul", n, "din sirul lui Fibonacci este", fibonacci(n), "si are", numar_divizori(fibonacci(n)), "divizori.") print("Termenul", n, "din sirul lui Iccanobif este", iccanobif(n), "si are", numar_divizori(iccanobif(n)), "divizori.")
</syntaxhighlight>
Explicatie cod:
Această bucată de cod calculează termenii n din șirurile lui Fibonacci și Iccanobif și numărul lor de divizori, și adaugă o funcție de validare care verifică dacă input-ul este între 1 și 50.
Funcția rasturnat primește un număr și îl întoarce în ordine inversă, transformându-l întâi într-un șir de caractere și apoi folosind notarea cu pas negativ pentru a-l inversa.
Funcția numar_divizori calculează numărul de divizori ai unui număr, numărând toate divizorii între 1 și numărul dat și returnând numărul lor.
Funcția fibonacci calculează termenul n din șirul lui Fibonacci prin adunarea celor două termeni anterioare (sau 1, în cazul în care n este mai mic sau egal cu 2).
Funcția iccanobif calculează termenul n din șirul Iccanobif prin adunarea răsturnatei a două termeni anterioare (sau 1, în cazul în care n este mai mic sau egal cu 2).