0951 - Cifre7: Difference between revisions
Pagină nouă: Se generează un şir de cifre ai cărui primi termeni sunt, în această ordine: '''1, 1, 2, 4, 7, 3, 4, 4, 1, 9, 4, 4, 7, 5, 6, 8,...''' ==Cerință== Deduceţi regula după care sunt generaţi termenii şirului şi scrieţi un program care să citească numerele naturale n, k şi p şi care să determine: a) numărul de apariţii ale cifrei k printre primii n termeni ai şirului din enunţ; b) cel de-al p-lea termen al şirului din enunţ. ==Date de intrare== Programul... |
|||
(6 intermediate revisions by 2 users not shown) | |||
Line 4: | Line 4: | ||
==Cerință== | ==Cerință== | ||
Deduceţi regula după care sunt generaţi termenii şirului şi scrieţi un program care să citească numerele naturale n, k şi p şi care să determine: | Deduceţi regula după care sunt generaţi termenii şirului şi scrieţi un program care să citească numerele naturale '''n''', '''k''' şi '''p''' şi care să determine: | ||
a) numărul de apariţii ale cifrei k printre primii n termeni ai şirului din enunţ; | a) numărul de apariţii ale cifrei k printre primii n termeni ai şirului din enunţ; | ||
<br> | |||
b) cel de-al p-lea termen al şirului din enunţ. | b) cel de-al p-lea termen al şirului din enunţ. | ||
==Date de intrare== | ==Date de intrare== | ||
Programul citește de la tastatură numerele n k p. | Programul citește de la tastatură numerele '''n k p'''. | ||
==Date de ieșire== | ==Date de ieșire== | ||
Line 24: | Line 25: | ||
*Pentru rezolvarea corectă a cerinţei a) se acordă '''30%''' din punctaj iar pentru cerinţa b) 70% din punctaj. | *Pentru rezolvarea corectă a cerinţei a) se acordă '''30%''' din punctaj iar pentru cerinţa b) 70% din punctaj. | ||
== | ==Exemplul 1== | ||
;Intrare | ;Intrare | ||
19 4 26 | |||
;Ieșire | |||
Datele de intrare corespund restrictiilor impuse. | |||
5 | |||
7 | |||
==Exemplul 2== | |||
;Intrare | |||
200 200 200 | |||
;Ieșire | ;Ieșire | ||
Datele de intrare nu corespund restrictiilor impuse. | |||
==Rezolvare== | ==Rezolvare== | ||
<syntaxhighlight lang="python" line="1" start="1"> | <syntaxhighlight lang="python" line="1" start="1"> | ||
def sir_numere( | |||
def verificare_restrictii(nr_n, nr_k, nr_p): # functia de verificare a datelor de intrare | |||
if 17 <= nr_n <= 100 and 0 <= nr_k <= 9 and 1 <= nr_p <= 2000000000: | |||
return True | |||
else: | |||
return False | |||
def sir_numere(nr_n, nr_k, nr_p): | |||
sir = [1, 1, 2, 4, 7, 3, 4, 4, 1, 9] | sir = [1, 1, 2, 4, 7, 3, 4, 4, 1, 9] | ||
while len(sir) < max( | while len(sir) < max(nr_n, nr_p): | ||
ultim_cifra = sir[-1] % 10 | ultim_cifra = sir[-1] % 10 | ||
penultim_cifra = sir[-2] % 10 | penultim_cifra = sir[-2] % 10 | ||
Line 45: | Line 66: | ||
nou_cifra = (ultim_cifra + penultim_cifra + antepenultim_cifra) % 10 | nou_cifra = (ultim_cifra + penultim_cifra + antepenultim_cifra) % 10 | ||
sir.append(nou_cifra) | sir.append(nou_cifra) | ||
nr_aparitii_k = sir[:n].count(nr_k) | |||
al_p_lea_termen = sir[p-1] | |||
return | return nr_aparitii_k, al_p_lea_termen | ||
if __name__ == "__main__": | if __name__ == "__main__": | ||
n = | try: | ||
n = int(input("Introduceti numarul n: ")) | |||
k = int(input("Introduceti numarul k: ")) | |||
p = int(input("Introduceti numarul p: ")) | |||
if verificare_restrictii(n, k, p): # verificam datele de intrare | |||
print("Datele de intrare corespund restrictiilor impuse.") | |||
aparitii_k, p_lea_termen = sir_numere(n, k, p) | |||
print(aparitii_k) | |||
print(p_lea_termen) | |||
else: | |||
print("Datele de intrare nu corespund restrictiilor impuse.") | |||
# ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator | |||
except ValueError: | |||
print("Datele de intrare nu corespund restrictiilor impuse.") | |||
except IndexError: | |||
print("Datele de intrare nu corespund restrictiilor impuse.") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicație== | ==Explicație== | ||
Primii 19 termeni ai şirului sunt: 1,1,2,4,7,3,4,4,1,9,4,4,7,5,6, 8,9,3,0. | Primii 19 termeni ai şirului sunt: '''1,1,2,4,7,3,4,4,1,9,4,4,7,5,6, 8,9,3,0'''. | ||
Primul număr afişat este 5, deoarece sunt 5 cifre din șir egale cu k (k=4) printre primii n=19 termeni ai şirului. | Primul număr afişat este 5, deoarece sunt 5 cifre din șir egale cu '''k (k=4)''' printre primii '''n=19''' termeni ai şirului. | ||
Al doilea număr afişat este 7, deoarece cel de-al p-lea (p=26) termen al şirului este 7. | Al doilea număr afişat este 7, deoarece cel de-al p-lea (p=26) termen al şirului este 7. |
Latest revision as of 18:51, 15 November 2023
Se generează un şir de cifre ai cărui primi termeni sunt, în această ordine: 1, 1, 2, 4, 7, 3, 4, 4, 1, 9, 4, 4, 7, 5, 6, 8,...
Cerință[edit | edit source]
Deduceţi regula după care sunt generaţi termenii şirului şi scrieţi un program care să citească numerele naturale n, k şi p şi care să determine:
a) numărul de apariţii ale cifrei k printre primii n termeni ai şirului din enunţ;
b) cel de-al p-lea termen al şirului din enunţ.
Date de intrare[edit | edit source]
Programul citește de la tastatură numerele n k p.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran două numere naturale:
- primul număr va reprezenta numărul de apariţii ale cifrei k printre primii n termeni ai şirului din enunţ;
- al doilea număr va reprezenta cel de-al p-lea termen al şirului din enunţ.
Restricții de precizări[edit | edit source]
- Numerele n k p sunt naturale
- 17 ≤ n ≤100; 0 ≤ k ≤ 9; 1≤ p ≤ 2000000000
- Pentru rezolvarea corectă a cerinţei a) se acordă 30% din punctaj iar pentru cerinţa b) 70% din punctaj.
Exemplul 1[edit | edit source]
- Intrare
19 4 26
- Ieșire
Datele de intrare corespund restrictiilor impuse. 5 7
Exemplul 2[edit | edit source]
- Intrare
200 200 200
- Ieșire
Datele de intrare nu corespund restrictiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1" start="1">
def verificare_restrictii(nr_n, nr_k, nr_p): # functia de verificare a datelor de intrare
if 17 <= nr_n <= 100 and 0 <= nr_k <= 9 and 1 <= nr_p <= 2000000000: return True else: return False
def sir_numere(nr_n, nr_k, nr_p):
sir = [1, 1, 2, 4, 7, 3, 4, 4, 1, 9] while len(sir) < max(nr_n, nr_p): ultim_cifra = sir[-1] % 10 penultim_cifra = sir[-2] % 10 antepenultim_cifra = sir[-3] % 10 nou_cifra = (ultim_cifra + penultim_cifra + antepenultim_cifra) % 10 sir.append(nou_cifra) nr_aparitii_k = sir[:n].count(nr_k) al_p_lea_termen = sir[p-1] return nr_aparitii_k, al_p_lea_termen
if __name__ == "__main__":
try: n = int(input("Introduceti numarul n: ")) k = int(input("Introduceti numarul k: ")) p = int(input("Introduceti numarul p: "))
if verificare_restrictii(n, k, p): # verificam datele de intrare print("Datele de intrare corespund restrictiilor impuse.") aparitii_k, p_lea_termen = sir_numere(n, k, p) print(aparitii_k) print(p_lea_termen) else: print("Datele de intrare nu corespund restrictiilor impuse.") # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator except ValueError: print("Datele de intrare nu corespund restrictiilor impuse.") except IndexError: print("Datele de intrare nu corespund restrictiilor impuse.")
</syntaxhighlight>
Explicație[edit | edit source]
Primii 19 termeni ai şirului sunt: 1,1,2,4,7,3,4,4,1,9,4,4,7,5,6, 8,9,3,0.
Primul număr afişat este 5, deoarece sunt 5 cifre din șir egale cu k (k=4) printre primii n=19 termeni ai şirului.
Al doilea număr afişat este 7, deoarece cel de-al p-lea (p=26) termen al şirului este 7.