2422 - Produs Maxim: Difference between revisions
Pagină nouă: == Cerinţa == Se citesc mai multe numere naturale nenule. Fiecare astfel de număr '''X''' se va afișa, urmat de un triplet de numere '''a b c''' cu proprietatea că '''a+b+c=X''', iar produsul lor este maxim. == Date de intrare == Fișierul de intrare '''produsmaxim.in''' conține mai multe numere naturale separate prin spații și scrise pe unul sau mai multe rânduri. == Date de ieşire == Fișierul de ieșire '''produsmaxim.out''' va conține pe mai multe linii valorile... |
No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 2: | Line 2: | ||
Se citesc mai multe numere naturale nenule. Fiecare astfel de număr '''X''' se va afișa, urmat de un triplet de numere '''a b c''' cu proprietatea că '''a+b+c=X''', iar produsul lor este maxim. | Se citesc mai multe numere naturale nenule. Fiecare astfel de număr '''X''' se va afișa, urmat de un triplet de numere '''a b c''' cu proprietatea că '''a+b+c=X''', iar produsul lor este maxim. | ||
== Date de intrare == | == Date de intrare == | ||
Fișierul de intrare ''' | Fișierul de intrare '''produsmaximin.txt''' conține mai multe numere naturale separate prin spații și scrise pe unul sau mai multe rânduri. | ||
== Date de ieşire == | == Date de ieşire == | ||
Fișierul de ieșire ''' | Fișierul de ieșire '''produsmaximout.txt''' va conține pe mai multe linii valorile '''X a b c''' separate printr-un spațiu, reprezentând numărul și tripletul corespunzător acestuia, pentru fiecare număr citit din fișierului de intrare. | ||
== Restricții și precizări == | == Restricții și precizări == | ||
* vor fi cel mult '''100.000''' de numere în fișierul de intrare | * vor fi cel mult '''100.000''' de numere în fișierul de intrare | ||
Line 10: | Line 10: | ||
* '''a ≤ b ≤ c''' | * '''a ≤ b ≤ c''' | ||
* fiecare rând din fișierul de intrare va conține exact patru valori, conform cerinței | * fiecare rând din fișierul de intrare va conține exact patru valori, conform cerinței | ||
== | == Exemplul 1 == | ||
; | ; produsmaximin.txt | ||
: 7 5 | : 7 5 | ||
; | ; produsmaximout.txt | ||
: Datele introduse corespund restricțiilor impuse. | |||
: 7 2 2 3 | : 7 2 2 3 | ||
: 5 1 2 2 | : 5 1 2 2 | ||
== Explicație == | == Explicație == | ||
În fișierul de intrare se găsesc două numere '''7''' și '''5''', iar fișierul de ieșire va avea două linii, cu valorile cerute (de exemplu, dintre toate tripletele în care se poate descompune '''7''': '''1+2+4''', '''1+3+3''', '''2+2+3''', produsul '''2*2*3''' este cel mai mare). | În fișierul de intrare se găsesc două numere '''7''' și '''5''', iar fișierul de ieșire va avea două linii, cu valorile cerute (de exemplu, dintre toate tripletele în care se poate descompune '''7''': '''1+2+4''', '''1+3+3''', '''2+2+3''', produsul '''2*2*3''' este cel mai mare). | ||
== Exemplul 2 == | |||
; produsmaximin.txt | |||
: 7 n | |||
; produsmaximout.txt | |||
: Datele introduse nu corespund restricțiilor impuse. | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def | # 2422 - Produs Maxim | ||
def validare(nr): # functia de validare a datelor de intrare | |||
if len(nr) > 100000: | |||
raise ValueError | |||
for numar in nr: | |||
if numar > 10000000: | |||
raise ValueError | |||
file_out.write("Datele de intrare corespund restrictiilor impuse\n") | |||
for X in | def find_triplet(x): # functia de rezolvare | ||
a1 = x // 3 | |||
b1 = (x - a1) // 2 | |||
c1 = x - a1 - b1 | |||
return a1, b1, c1 | |||
if __name__ == '__main__': | |||
file_in = open("produsmaximin.txt", "r") # declararea fisierelor | |||
file_out = open("produsmaximout.txt", "w") # fisierul out trebuie declarat cu optiunea "w" (write) | |||
try: | |||
numere = [int(x) for x in file_in.read().split()] # citirea numerelor se face ca lista de numere | |||
validare(numere) # apelul functiei de validare | |||
for X in numere: | |||
a, b, c = find_triplet(X) | |||
file_out.write(f"{X} {a} {b} {c}\n") # apelul functiei de rezolvare | |||
except ValueError: | |||
file_out.write("Datele de intrare nu corespund restrictiilor impuse") | |||
except IndexError: | |||
file_out.write("Datele de intrare nu corespund restrictiilor impuse") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 20:22, 10 November 2023
Cerinţa[edit | edit source]
Se citesc mai multe numere naturale nenule. Fiecare astfel de număr X se va afișa, urmat de un triplet de numere a b c cu proprietatea că a+b+c=X, iar produsul lor este maxim.
Date de intrare[edit | edit source]
Fișierul de intrare produsmaximin.txt conține mai multe numere naturale separate prin spații și scrise pe unul sau mai multe rânduri.
Date de ieşire[edit | edit source]
Fișierul de ieșire produsmaximout.txt va conține pe mai multe linii valorile X a b c separate printr-un spațiu, reprezentând numărul și tripletul corespunzător acestuia, pentru fiecare număr citit din fișierului de intrare.
Restricții și precizări[edit | edit source]
- vor fi cel mult 100.000 de numere în fișierul de intrare
- numerele citite vor fi mai mici decât 10.000.000
- a ≤ b ≤ c
- fiecare rând din fișierul de intrare va conține exact patru valori, conform cerinței
Exemplul 1[edit | edit source]
- produsmaximin.txt
- 7 5
- produsmaximout.txt
- Datele introduse corespund restricțiilor impuse.
- 7 2 2 3
- 5 1 2 2
Explicație[edit | edit source]
În fișierul de intrare se găsesc două numere 7 și 5, iar fișierul de ieșire va avea două linii, cu valorile cerute (de exemplu, dintre toate tripletele în care se poate descompune 7: 1+2+4, 1+3+3, 2+2+3, produsul 2*2*3 este cel mai mare).
Exemplul 2[edit | edit source]
- produsmaximin.txt
- 7 n
- produsmaximout.txt
- Datele introduse nu corespund restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 2422 - Produs Maxim
def validare(nr): # functia de validare a datelor de intrare
if len(nr) > 100000: raise ValueError for numar in nr: if numar > 10000000: raise ValueError file_out.write("Datele de intrare corespund restrictiilor impuse\n")
def find_triplet(x): # functia de rezolvare
a1 = x // 3 b1 = (x - a1) // 2 c1 = x - a1 - b1 return a1, b1, c1
if __name__ == '__main__':
file_in = open("produsmaximin.txt", "r") # declararea fisierelor file_out = open("produsmaximout.txt", "w") # fisierul out trebuie declarat cu optiunea "w" (write)
try: numere = [int(x) for x in file_in.read().split()] # citirea numerelor se face ca lista de numere validare(numere) # apelul functiei de validare for X in numere: a, b, c = find_triplet(X) file_out.write(f"{X} {a} {b} {c}\n") # apelul functiei de rezolvare
except ValueError: file_out.write("Datele de intrare nu corespund restrictiilor impuse") except IndexError: file_out.write("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>