0273 - Ord Sume

From Bitnami MediaWiki
Revision as of 07:21, 7 November 2023 by Zmicala Narcis (talk | contribs) (Pagină nouă: == Cerinţa == 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 == Fişierul de intrare ordsume.in 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 == Fişierul de ieşire '''ordsume.out''' va conţine pe prima linie, în ordine crescă...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa

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

Fişierul de intrare ordsume.in 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

Fişierul de ieşire ordsume.out 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

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

Exemplu

ordsume.in
4
1 7 3 5
ordsume.out
4 6 8 10 12

Rezolvare

<syntaxhighlight lang="python" line> def calculeaza_sume(input_file, output_file):

   with open(input_file, 'r') as fisier:
       n = int(fisier.readline())
       numere = [int(numar) for numar in fisier.readline().split()]
   # Calculăm toate sumele posibile de două numere distincte
   sume = {numere[i] + numere[j] for i in range(n) for j in range(i+1, n)}
   with open(output_file, 'w') as fisier:
       # Scriem sumele în ordine crescătoare în fișierul de ieșire
       fisier.write(' '.join(str(suma) for suma in sorted(sume)))

if __name__ == "__main__":

   calculeaza_sume('ordsume.in', 'ordsume.out')

</syntaxhighlight>