2422 - Produs Maxim

From Bitnami MediaWiki
Revision as of 20:22, 10 November 2023 by Zmicala Narcis (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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>

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