0273 - Ord Sume: Difference between revisions
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 | 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 ''' | 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 | ||
== | == Exemplul 1 == | ||
; | ; ordsumein.txt | ||
: 4 | : 4 | ||
: 1 7 3 5 | : 1 7 3 5 | ||
; | ; 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 | # 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: | ||
sume = { | 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__": | 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> | </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>
- 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>