0273 - Ord Sume: Difference between revisions

From Bitnami MediaWiki
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ă...
 
No edit summary
 
Line 2: Line 2:
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.
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 ==
== 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.
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 ==
== 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.
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 ==
== Restricții și precizări ==
* '''1 ≤ n ≤ 100'''
* '''1 ≤ n ≤ 100'''
* numerele de pe a doua linie a fişierului de intrare vor avea cel mult '''8''' cifre
* numerele de pe a doua linie a fişierului de intrare vor avea cel mult '''8''' cifre
== Exemplu ==
== Exemplul 1 ==
; ordsume.in
; ordsumein.txt
: 4
: 4
: 1 7 3 5
: 1 7 3 5
; ordsume.out
; ordsumeout.txt
Datele introduse corespund restricțiilor impuse.
: 4 6 8 10 12
: 4 6 8 10 12
== Exemplul 2 ==
; ordsumein.txt
: 3
: 1 2 123456789
; ordsumeout.txt
Datele introduse nu corespund restricțiilor impuse.
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def calculeaza_sume(input_file, output_file):
# 0273 - Ord Sume
     with open(input_file, 'r') as fisier:
def validare(n_validare, numere_validare): # functia de validare a datelor de intrare
         n = int(fisier.readline())
     if n_validare > 100 or n_validare < 1:
        numere = [int(numar) for numar in fisier.readline().split()]
         raise ValueError


     # Calculăm toate sumele posibile de două numere distincte
     for numar in numere_validare:
     sume = {numere[i] + numere[j] for i in range(n) for j in range(i+1, n)}
        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)))


    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__":
if __name__ == "__main__":
     calculeaza_sume('ordsume.in', 'ordsume.out')
     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>
</syntaxhighlight>

Latest revision as of 21:51, 11 December 2023

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>