2213 - Sir Div K: Difference between revisions
Diana Butuza (talk | contribs) |
No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 29: | Line 29: | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def validare_date(a, b, c, n, k): | def validare_date(a, b, c, n, k): | ||
# Verificăm dacă toate valorile de intrare respectă restricțiile | |||
if not(1 < n < 1000) or not(2 <= k < 32000) or not(0 <= b <= 9) or not(0 <= c <= 9) or not(1 <= a <= 9): | if not(1 < n < 1000) or not(2 <= k < 32000) or not(0 <= b <= 9) or not(0 <= c <= 9) or not(1 <= a <= 9): | ||
return False | return False | ||
Line 35: | Line 36: | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
with open("sirdivk. | # Deschidem fișierul de intrare și citim valorile de intrare | ||
a, b, c, n, k = map(int, | with open("sirdivk.in", "r") as f_in: | ||
a, b, c, n, k = map(int, f_in.readline().split()) | |||
# Verificăm dacă valorile de intrare sunt valide | |||
if not validare_date(a, b, c, n, k): | |||
# Scriem un mesaj de eroare în fișierul de ieșire și ieșim din program | |||
with open("sirdivk.out", "w") as f_out: | |||
f_out.write("Datele nu corespund restricțiilor impuse.") | f_out.write("Datele nu corespund restricțiilor impuse.") | ||
exit() | |||
else: | |||
# Secvența de operații pe care o vom efectua dacă valorile de intrare sunt valide | |||
numar = [a] * n | numar = [a] * n | ||
for i in range(1, n): | for i in range(1, n): | ||
Line 59: | Line 63: | ||
rest %= k | rest %= k | ||
f_out.write(str(gasite)) | # Scriem rezultatul în fișierul de ieșire | ||
with open("sirdivk.out", "w") as f_out: | |||
f_out.write("Datele sunt introduse corect.\n") | |||
f_out.write(str(gasite)) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Latest revision as of 19:43, 9 April 2023
Enunț[edit | edit source]
Cu ajutorul a trei cifre date a, b, c, unde a > 0, se construieşte următorul şir de numere: a,ab,abc,abca,abcab,abcabc,… . De exemplu, pentru a=1, b=3, c=7, putem construi şirul: 1,13,137, 1371,13713, 137137, 1371371, 13713713, ...
Cerinţa[edit | edit source]
Scrieţi un program care determină câte numere divizibile cu k se găsesc în primii n termeni ai şirului dat.
Date de intrare[edit | edit source]
Fișierul de intrare sirdivk.in conține pe prima linie numerele a b c n k.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe urmatorul rand fișierul de ieșire sirdivk.out conţine o singură linie pe care este scris numărul nr de numere divizibile cu k aflate printre primii n termeni ai şirului dat. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".
Restricţii şi precizări[edit | edit source]
- 1 < n < 1000
- 2 ⩽ k < 32000
- 1 ⩽ a ⩽ 9, 0 ⩽ b,c ⩽ 9
Exemplu[edit | edit source]
- sirdivk.in
- 7 2 1 8 3
- sirdivk.out
- Datele sunt introduse corect.
- 2
Explicație[edit | edit source]
Printre primii 8 termeni ai şirului: 7, 72, 721, 7217, 72172, 721721, 7217217, 72172172,... există doi termeni divizibili cu 3.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def validare_date(a, b, c, n, k):
# Verificăm dacă toate valorile de intrare respectă restricțiile if not(1 < n < 1000) or not(2 <= k < 32000) or not(0 <= b <= 9) or not(0 <= c <= 9) or not(1 <= a <= 9): return False else: return True
if __name__ == '__main__':
# Deschidem fișierul de intrare și citim valorile de intrare with open("sirdivk.in", "r") as f_in: a, b, c, n, k = map(int, f_in.readline().split())
# Verificăm dacă valorile de intrare sunt valide if not validare_date(a, b, c, n, k): # Scriem un mesaj de eroare în fișierul de ieșire și ieșim din program with open("sirdivk.out", "w") as f_out: f_out.write("Datele nu corespund restricțiilor impuse.") exit() else: # Secvența de operații pe care o vom efectua dacă valorile de intrare sunt valide numar = [a] * n for i in range(1, n): if i % 3 == 1: numar[i] = b elif i % 3 == 2: numar[i] = c
rest = 0 gasite = 0 for i in range(n): rest = rest * 10 + numar[i] if rest % k == 0: gasite += 1 rest %= k
# Scriem rezultatul în fișierul de ieșire with open("sirdivk.out", "w") as f_out: f_out.write("Datele sunt introduse corect.\n") f_out.write(str(gasite))
</syntaxhighlight>