0273 - Ord Sume

From Bitnami MediaWiki
Revision as of 21:51, 11 December 2023 by Zmicala Narcis (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa[edit | edit source]

Se dă un şir cu n elemente, numere naturale. Să se afişeze, în ordine crescătoare, toate valorile distincte care se pot obţine ca sumă de două valori distincte din şir.

Date de intrare[edit | edit source]

Fişierul de intrare ordsumein.txt conţine pe prima linie numărul n, iar pe a doua cele n elemente ale şirului dat, separate prin spaţii.

Date de ieşire[edit | edit source]

Fişierul de ieşire ordsumeout.txt va conţine pe prima linie, în ordine crescătoare, toate valorile distincte care se pot obţine ca sumă de două valori distincte din şir, separate printr-un spaţiu.

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

  • 1 ≤ n ≤ 100
  • numerele de pe a doua linie a fişierului de intrare vor avea cel mult 8 cifre

Exemplul 1[edit | edit source]

ordsumein.txt
4
1 7 3 5
ordsumeout.txt

Datele introduse corespund restricțiilor impuse.

4 6 8 10 12

Exemplul 2[edit | edit source]

ordsumein.txt
3
1 2 123456789
ordsumeout.txt

Datele introduse nu corespund restricțiilor impuse.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 0273 - Ord Sume

def validare(n_validare, numere_validare): # functia de validare a datelor de intrare

   if n_validare > 100 or n_validare < 1:
       raise ValueError
   for numar in numere_validare:
       if not str(numar).isdigit() or len(str(numar)) > 8:  # numărul trebuie să fie cifră cu maxim 8 cifre
           raise ValueError
   fisier_iesire.write("Datele introduse corespund restrictiilor impuse\n")


def calculeaza_sume(n_calcul, numere_calculeaza): # functia de rezolvare

   sume = {numere_calculeaza[i] + numere_calculeaza[j] for i in range(n_calcul) for j in range(i + 1, n_calcul)}
   fisier_iesire.write(' '.join(str(suma) for suma in sorted(sume)))


if __name__ == "__main__":

   fisier_intrare = open("ordsumein.txt", "r")  # declararea fisierelor
   fisier_iesire = open("ordsumeout.txt", "w")  # fisierul out trebuie declarat cu optiunea "w" (write)
   try:
       n = int(fisier_intrare.readline())
       numere = [int(numar) for numar in fisier_intrare.readline().split()]
       validare(n, numere)  # apelul functiei de validare
       calculeaza_sume(n, numere)  # apelul functiei de rezolvare
   except ValueError:
       fisier_iesire.write("Datele introduse nu corespund restrictiilor impuse")

</syntaxhighlight>