4266 - MITM: Difference between revisions
No edit summary |
|||
Line 37: | Line 37: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python3" line="1"> | <syntaxhighlight lang="python3" line="1"> | ||
def suma_maxima_subsir( | def suma_maxima_subsir(arr, s): | ||
n = len(arr) | |||
suma_maxima = 0 | |||
suma_curenta = 0 | |||
stanga = 0 | stanga = 0 | ||
for dreapta in range(n): | for dreapta in range(n): | ||
suma_curenta += | suma_curenta += arr[dreapta] | ||
while suma_curenta > s: | while suma_curenta > s: | ||
suma_curenta -= | suma_curenta -= arr[stanga] | ||
stanga += 1 | stanga += 1 | ||
Line 53: | Line 54: | ||
return suma_maxima | return suma_maxima | ||
# Citire date de intrare | |||
n = int(input("Introduceti numarul de elemente: ")) | |||
s = int(input("Introduceti suma dorita: ")) | |||
sir = list(map(int, input("Introduceti sirul de numere separate prin spatiu: ").split())) | |||
# Calculare si afisare rezultat | |||
rezultat = suma_maxima_subsir(sir, s) | |||
print(f"Suma maxima posibila mai mica sau egala cu {s} este: {rezultat}") | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 10:30, 27 December 2023
Cerinta
Fie un număr natural s și un șir de n numere naturale nenule. Să se determine suma maximă posibilă, mai mică sau egală cu s ce se poate obține dintr-un subșir al șirului.
Date de intrare
Programul citește de la tastatură numărul n și s, apoi n numere naturale, separate prin spații, reprezentând elementele șirului.
Date de iesire
Programul va afișa pe ecran numărul M, reprezentând suma maximă posibilă, mai mică sau egală cu s ce se poate obține dintr-un subșir al șirului.
Restrictii si precizari
- 3 ⩽ n ⩽ 40
- 1 ⩽ s ⩽ 2.000.000.000
- Șirul va conține numere naturale nenule mai mici decât 50.000.001.
- Toate elementele șirului vor fi mici sau egale decât s.
Exemplul 1
- Intrare
- 5 20
- 5 10 6 8 3
- Iesire
- Datele introduse corespund restrictiilor impuse
- 19
Exemplul 2
- Intrare
- 1 1
- 4 29 2 0
- Iesire
- Datele introduse nu corespund restrictiilor impuse
Rezolvare
<syntaxhighlight lang="python3" line="1"> def suma_maxima_subsir(arr, s):
n = len(arr) suma_maxima = 0 suma_curenta = 0 stanga = 0
for dreapta in range(n): suma_curenta += arr[dreapta]
while suma_curenta > s: suma_curenta -= arr[stanga] stanga += 1
suma_maxima = max(suma_maxima, suma_curenta)
return suma_maxima
- Citire date de intrare
n = int(input("Introduceti numarul de elemente: ")) s = int(input("Introduceti suma dorita: ")) sir = list(map(int, input("Introduceti sirul de numere separate prin spatiu: ").split()))
- Calculare si afisare rezultat
rezultat = suma_maxima_subsir(sir, s) print(f"Suma maxima posibila mai mica sau egala cu {s} este: {rezultat}")
</syntaxhighlight>
Explicatie
Suma maximă mai mică sau egală decât 20 este 17 și se formează doar din numărul 17.