1877 - K Max: Difference between revisions

From Bitnami MediaWiki
Andrada378 (talk | contribs)
Pagină nouă: Cerinta 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 Programul citește de la tastatură numărul n, iar apoi cele n elemente ale șirului, apoi numărul k. Date de iesire Programul va afișa pe ecran numărul S, reprezentând suma maximă determinată. Rezolvare def maxima_suma(n, si...
 
Andrada378 (talk | contribs)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
Cerinta
== Cerința ==
 
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.
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
== Date de intrare ==
 
Programul citește de la tastatură numărul n, iar apoi cele n elemente ale șirului, apoi numărul k.
Programul citește de la tastatură numărul n, iar apoi cele n elemente ale șirului, apoi numărul k.


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


Rezolvare
== Restricții și precizări ==


def maxima_suma(n, sir, k):
* 1 ≤ n ≤ 1000
* elementele șirului vor fi cuprinse între -1.000.000 și 1.000.000


    sir.sort()  # Sortăm șirul pentru a identifica cele mai mici numere negative
=== Exemplu: ===
'''Intrare'''


    suma = 0
5


    count = 0
5 -2 -3 4 1


    for i in range(n):
1


        if sir[i] < 0 and count < k:  # Schimbăm semnul numai pentru elementele negative și doar de k ori
'''Ieșire'''


            sir[i] *= -1
11


            count += 1
== Rezolvare ==
<syntaxhighlight lang="python">
def calculeaza_max_sum(n, v, k):
    v.sort()


    return sum(sir)  # Returnăm suma finală a întregului șir modificat
    for i in range(k):
        v[i] *= -1


def main():
    s = sum(v)
    return s


    n = int(input("Introduceți numărul de elemente din șir: "))
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.")


    sir = list(map(int, input("Introduceți elementele șirului separate prin spațiu: ").split()))
    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.")


    k = int(input("Introduceți valoarea lui k: "))
    while True:
 
        k = int(input("Introduceți valoarea lui k: "))
    if k <= n:
        if 1 <= k <= n:
 
            break
        rezultat = maxima_suma(n, sir, k)
        else:
 
            print("Intrare invalidă. Vă rugăm introduceți o valoare în intervalul specificat.")
        print("Suma maximă obținută schimbând semnul a", k, "elemente distincte:", rezultat)
 
    else:
 
        print("k trebuie fie mai mic sau egal cu n!")
 
if __name__ == "__main__":


    main()
    rezultat = calculeaza_max_sum(n, v, k)
    print(rezultat)
</syntaxhighlight>

Latest revision as of 15:44, 4 January 2024

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>