0057 - N Suma: Difference between revisions

From Bitnami MediaWiki
Dragos1234 (talk | contribs)
Dragos1234 (talk | contribs)
Line 39: Line 39:
== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#1468
#0057
def validate_input(n, numbers):
def validate_input(n, numbers):
     if not 1 <= n <= 1000000:
     if n < 0 or n > 1000:
        print("Input invalid: n trebuie să fie între 1 și 1.000.000")
         return False
        exit()
    if len(numbers) != n:
        print("Input invalid: numărul de numere nu corespunde valorii lui n")
         exit()
     for num in numbers:
     for num in numbers:
         if not 1 <= num <= 1000000000:
         if abs(num) >= 1000:
             print("Input invalid: numerele trebuie să fie între 1 și 1.000.000.000")
             return False
            exit()
    return True




def main(input_file, output_file):
def n_suma():
     with open(input_file, 'r') as f_in, open(output_file, 'w') as f_out:
     with open("n_suma.in", "r") as istr, open("n_suma.out", "w") as ostr:
         n = int(f_in.readline().strip())
         n = int(istr.readline())
         numbers = list(map(int, f_in.readlines()))
         numbers = []
         validate_input(n, numbers)
         for i in range(1, n + 1):
        cnt, minim = 0, 1000000001
             num = int(istr.readline())
        maxim, s = 0, 0
            numbers.append(num)
        for x in numbers:
             if x <= minim:
                if s + x > maxim:
                    maxim = s + x
                cnt += 1
                minim = x
                s = x
            elif x > minim:
                s += x
        f_out.write(str(cnt) + '\n')
        f_out.write(str(maxim) + '\n')


        if not validate_input(n, numbers):
            ostr.write("Date de intrare invalide")
            return


main('relativ.in', 'relativ.out')
        s = sum(numbers)
        ostr.write(str(s))
 
 
n_suma()


</syntaxhighlight>
</syntaxhighlight>

Revision as of 17:39, 2 April 2023

Sursa: [1]

Cerinţa

Să se scrie un program care să citească n numere întregi și să calculeze suma lor.

Date de intrare

Fișierul de intrare n_suma.in conține pe prima linie numărul n, iar pe următoarele linii n numere întregi.

Date de ieșire

Fișierul de ieșire relativ.out va conține pe prima linie numărul k, reprezentând numărul termenilor din şir care sunt minime relative, iar pe a doua linie maximul sumei elementelor dintr-o secvenţă cuprinsă între două minime relative consecutive din şir, inclusiv acestea.

Restricţii şi precizări

  • 0 < n < 1000
  • valoarea absolută a celor n numere citite va fi mai mică decât 1000.

Exemplul 1

Intrare
5
1
2
3
4
5
Ieșire
15


Exemplul 2

Intrare
3
3
5
9
2
7
Ieșire
17


Rezolvare

<syntaxhighlight lang="python" line>

  1. 0057

def validate_input(n, numbers):

   if n < 0 or n > 1000:
       return False
   for num in numbers:
       if abs(num) >= 1000:
           return False
   return True


def n_suma():

   with open("n_suma.in", "r") as istr, open("n_suma.out", "w") as ostr:
       n = int(istr.readline())
       numbers = []
       for i in range(1, n + 1):
           num = int(istr.readline())
           numbers.append(num)
       if not validate_input(n, numbers):
           ostr.write("Date de intrare invalide")
           return
       s = sum(numbers)
       ostr.write(str(s))


n_suma()

</syntaxhighlight>

Explicatie rezolvare

Acest program citeste un numar intreg n din fisierul n_suma.in si o lista de numere intregi numbers de lungime n, apoi calculeaza suma tuturor numerelor din lista si o scrie in fisierul n_suma.out.

Inainte de a efectua calculele, programul verifica daca datele de intrare sunt valide, folosind functia validate_input(n, numbers). Aceasta functie returneaza False daca n este negativ sau depaseste 1000 sau daca orice element din numbers are o valoare absoluta mai mare sau egala cu 1000. Daca datele de intrare nu sunt valide, programul scrie mesajul "Date de intrare invalide" in fisierul "n_suma.out" si se opreste prin instructiunea return.

Daca datele de intrare sunt valide, programul calculeaza suma elementelor din numbers cu functia sum() si scrie valoarea in fisierul n_suma.out cu ostr.write().