1877 - K Max

From Bitnami MediaWiki

Cerința[edit | edit source]

Se dă un șir cu n elemente, numere întregi, și un număr natural k ≤ n. Calculați cea mai mare sumă care poate fi obținută schimbând semnul a exact k elemente aflate pe poziții distincte din șirul dat.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi cele n elemente ale șirului, apoi numărul k.

Date de iesire[edit | edit source]

Programul va afișa pe ecran numărul S, reprezentând suma maximă determinată.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 1000
  • elementele șirului vor fi cuprinse între -1.000.000 și 1.000.000

Exemplu:[edit | edit source]

Intrare

5

5 -2 -3 4 1

1

Ieșire

11

Rezolvare[edit | edit source]

<syntaxhighlight lang="python"> def calculeaza_max_sum(n, v, k):

   v.sort()
   for i in range(k):
       v[i] *= -1
   s = sum(v)
   return s

if __name__ == "__main__":

   while True:
       n = int(input("Introduceți valoarea lui n (1 ≤ n ≤ 1000): "))
       if 1 <= n <= 1000:
           break
       else:
           print("Intrare invalidă. Vă rugăm să introduceți o valoare în intervalul specificat.")
   while True:
       v = list(map(int, input("Introduceți elementele șirului separate prin spațiu: ").split()))
       elemente_valide = all(-1000000 <= elem <= 1000000 for elem in v)
       if elemente_valide:
           break
       else:
           print("Intrare invalidă. Asigurați-vă că toate elementele sunt în intervalul specificat.")
   while True:
       k = int(input("Introduceți valoarea lui k: "))
       if 1 <= k <= n:
           break
       else:
           print("Intrare invalidă. Vă rugăm să introduceți o valoare în intervalul specificat.")
   rezultat = calculeaza_max_sum(n, v, k)
   print(rezultat)

</syntaxhighlight>