2422 - Produs Maxim

From Bitnami MediaWiki
Revision as of 20:21, 10 November 2023 by Zmicala Narcis (talk | contribs)

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

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

  • 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

produsmaximin.txt
7 5
produsmaximout.txt
Datele introduse corespund restricțiilor impuse.
7 2 2 3
5 1 2 2

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

Exemplul 2

produsmaximin.txt
7 n
produsmaximout.txt
Datele introduse nu corespund restricțiilor impuse.

Rezolvare

<syntaxhighlight lang="python" line> 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>