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