4148 - Secv10: Difference between revisions
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/4148/secv10 4148 - Secv10] ---- == Cerinţa == Se dau n numere naturale, reprezentând elementele unui vector. Determinați lungimea maximă a unei secvențe de elemente divizibile cu 10, precum și numărul de secvențe de lungime maximă cu elemente divizibile cu 10. == Date de intrare == Fișierul de intrare secv10.in conține numărul n și n valori naturale, reprezentând elementele vectorului. == Date de ieșire == Fișierul de... |
No edit summary |
||
Line 8: | Line 8: | ||
== Date de ieșire == | == Date de ieșire == | ||
Fișierul de ieșire secv10.out va conține pe | Fișierul de ieșire secv10.out va conține: | ||
Dacă datele sunt introduse corect, pe ecran se va afișa: | |||
'''"Datele sunt introduse corect."''', apoi pe un rând nou '''numărul c''', reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."'''. | |||
== Restricţii şi precizări == | == Restricţii şi precizări == | ||
* 0 < n ≤ 10.000 | * 0 < n ≤ 10.000 | ||
Line 17: | Line 19: | ||
: 12 10 20 30 99 1000 1 20 500 600 5 | : 12 10 20 30 99 1000 1 20 500 600 5 | ||
; Ieșire | ; Ieșire | ||
: Datele nu corespund restricțiilor impuse./ | |||
: Datele sunt introduse corect. | |||
: 3 2 | : 3 2 | ||
Line 24: | Line 28: | ||
# 4148 - Secv10 | # 4148 - Secv10 | ||
def secvmax(n, v): | |||
lungime_max = 0 | |||
nr_max = 0 | |||
lungime_curenta = 0 | |||
for i in range(n): | |||
if v[i] % 10 == 0: | |||
lungime_curenta += 1 | |||
if lungime_curenta > lungime_max: | |||
lungime_max = lungime_curenta | |||
nr_max = 1 | |||
elif lungime_curenta == lungime_max: | |||
nr_max += 1 | |||
else: | |||
lungime_curenta = 0 | |||
return lungime_max, nr_max | |||
def validare(n, v): | |||
if len(v) != n: | |||
return False | |||
for x in v: | |||
if x % 10 != 0 or x < 0 or x > 1000000: | |||
return False | |||
return True | |||
if __name__ == '__main__': | |||
if v | n, v = citire_date() | ||
if validare(n, v): | |||
lungime, nr = secvmax(n, v) | |||
print("Datele sunt introduse corect.") | |||
print(lungime, nr) | |||
else: | else: | ||
print("Datele nu corespund restricțiilor impuse.") | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 18:33, 27 April 2023
Sursa: 4148 - Secv10
Cerinţa
Se dau n numere naturale, reprezentând elementele unui vector. Determinați lungimea maximă a unei secvențe de elemente divizibile cu 10, precum și numărul de secvențe de lungime maximă cu elemente divizibile cu 10.
Date de intrare
Fișierul de intrare secv10.in conține numărul n și n valori naturale, reprezentând elementele vectorului.
Date de ieșire
Fișierul de ieșire secv10.out va conține: Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou numărul c, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".
Restricţii şi precizări
- 0 < n ≤ 10.000
- elementele vectorului vor fi mai mici decât 1.000.000 și există cel puțin un element divizibil cu 10.
Exemplu
- Intrare
- 11
- 12 10 20 30 99 1000 1 20 500 600 5
- Ieșire
- Datele nu corespund restricțiilor impuse./
- Datele sunt introduse corect.
- 3 2
Rezolvare
Rezolvare ver. 1
<syntaxhighlight lang="python" line>
- 4148 - Secv10
def secvmax(n, v):
lungime_max = 0 nr_max = 0 lungime_curenta = 0 for i in range(n): if v[i] % 10 == 0: lungime_curenta += 1 if lungime_curenta > lungime_max: lungime_max = lungime_curenta nr_max = 1 elif lungime_curenta == lungime_max: nr_max += 1 else: lungime_curenta = 0 return lungime_max, nr_max
def validare(n, v):
if len(v) != n: return False for x in v: if x % 10 != 0 or x < 0 or x > 1000000: return False return True
if __name__ == '__main__':
n, v = citire_date() if validare(n, v): lungime, nr = secvmax(n, v) print("Datele sunt introduse corect.") print(lungime, nr) else: print("Datele nu corespund restricțiilor impuse.")
</syntaxhighlight>