4266 - MITM: Difference between revisions

From Bitnami MediaWiki
No edit summary
Line 37: Line 37:
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python3" line="1">
<syntaxhighlight lang="python3" line="1">
def suma_maxima_subsir(n, s, sir):
def suma_maxima_subsir(arr, s):
    n = len(arr)
    suma_maxima = 0
    suma_curenta = 0
     stanga = 0
     stanga = 0
    suma_curenta = 0
    suma_maxima = 0


     for dreapta in range(n):
     for dreapta in range(n):
         suma_curenta += sir[dreapta]
         suma_curenta += arr[dreapta]


         while suma_curenta > s:
         while suma_curenta > s:
             suma_curenta -= sir[stanga]
             suma_curenta -= arr[stanga]
             stanga += 1
             stanga += 1


Line 53: Line 54:
     return suma_maxima
     return suma_maxima


def main():
# Citire date de intrare
    # Citire număr de elemente și suma s
n = int(input("Introduceti numarul de elemente: "))
    n, s = map(int, input("Introduceti n si s: ").split())
s = int(input("Introduceti suma dorita: "))
 
sir = list(map(int, input("Introduceti sirul de numere separate prin spatiu: ").split()))
    # Citire elemente șirului
    sir = list(map(int, input("Introduceti n numere separate prin spatii: ").split()))


    # Calcul și afișare rezultat
# Calculare si afisare rezultat
    rezultat = suma_maxima_subsir(n, s, sir)
rezultat = suma_maxima_subsir(sir, s)
    print("Suma maximă posibilă este:", rezultat)
print(f"Suma maxima posibila mai mica sau egala cu {s} este: {rezultat}")


if __name__ == "__main__":
    main()


</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
  1. 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()))

  1. 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.