0273 - Ord Sume

De la Universitas MediaWiki

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 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

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

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

Exemplul 1

ordsumein.txt
4
1 7 3 5
ordsumeout.txt

Datele introduse corespund restricțiilor impuse.

4 6 8 10 12

Exemplul 2

ordsumein.txt
3
1 2 123456789
ordsumeout.txt

Datele introduse nu corespund restricțiilor impuse.

Rezolvare

# 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")