0951 - Cifre7: Difference between revisions
No edit summary |
|||
| (5 intermediate revisions by the same user 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 28: | Line 29: | ||
;Intrare | ;Intrare | ||
19 4 26 | |||
;Ieșire | ;Ieșire | ||
Datele de intrare corespund restrictiilor impuse. | |||
5 | |||
7 | |||
==Exemplul 2== | ==Exemplul 2== | ||
| Line 40: | Line 41: | ||
;Intrare | ;Intrare | ||
200 200 200 | |||
;Ieșire | ;Ieșire | ||
Datele de intrare nu corespund restrictiilor impuse. | |||
==Rezolvare== | ==Rezolvare== | ||
| Line 93: | Line 93: | ||
==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ță
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 citește de la tastatură numerele n k p.
Date de ieșire
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
- 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
- Intrare
19 4 26
- Ieșire
Datele de intrare corespund restrictiilor impuse. 5 7
Exemplul 2
- Intrare
200 200 200
- Ieșire
Datele de intrare nu corespund restrictiilor impuse.
Rezolvare
<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
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.