2811 - Triplete

From Bitnami MediaWiki

Cerința

Subprogramul triplete are trei parametri, a, b și c, în această ordine, prin care primește câte un număr natural din intervalul [0,10000] (a<b). Subprogramul afișează pe ecran în ordine lexicografică toate tripletele de numere naturale, x, y și z, soluții ale ecuației x+y+z=c, cu proprietatea că a≤ x≤ y≤ z≤ b.

Fiecare triplet afișat pe câte o linie și este încadrat între acolade, iar numerele x, y și z sunt afișate în această ordine, separate prin câte o virgulă. Dacă nu există niciun triplet cu proprietatea cerută, se afişează mesajul nu exista.

Scrieți definiția completă a subprogramului.

Important:

Soluția propusă va conține definiția subprogramului cerut. Prezența în soluție a altor instrucțiuni poate duce erori de compilare sau de execuție care vor avea ca efect depunctarea soluției.

Exemplul 1

Input:

a=2, b=4, c=8

Output:

{2,2,4}

{2,3,3}

Exemplul 2

Input:

a=-1, b=0, c=4

Output:

Parametrii a, b, sau c nu respectă condițiile specificate.

Rezolvare

<syntaxhighlight lang="python3" line="1"> def is_valid_interval(a, b, c):

   """
   Verifică dacă a, b și c se află în intervalul [0, 10000] și respectă relația a < b < c.
   :param a: Număr natural de verificat.
   :param b: Număr natural de verificat.
   :param c: Număr natural de verificat.
   :return: True dacă toți parametrii sunt în interval și respectă relația specificată, False în caz contrar.
   """
   return 0 <= a <= 10000 and 0 <= b <= 10000 and 0 <= c <= 10000 and a < b < c


def triplete(a, b, c):

   """
   Afișează în ordine lexicografică toate tripletele de numere naturale (x, y, z) soluții ale ecuației x+y+z=c,
   cu proprietatea că a ≤ x ≤ y ≤ z ≤ b.
   :param a: Număr natural din intervalul [0, 10000].
   :param b: Număr natural din intervalul [0, 10000], a < b.
   :param c: Număr natural din intervalul [0, 10000].
   """
   # Verificăm condițiile privind a, b, c și relația a < b < c
   if is_valid_interval(a, b, c):
       found_triplet = False
       # Iterăm prin posibilele valori pentru x, y, z
       for x in range(a, b + 1):
           for y in range(x, b + 1):
               z = c - x - y
               # Verificăm condiția x ≤ y ≤ z
               if x <= y <= z <= b:
                   # Afișăm tripletul pe ecran
                   print(f'{{{x},{y},{z}}}')
                   found_triplet = True
       # Afisăm mesajul dacă nu există niciun triplet
       if not found_triplet:
           print("nu exista")
   else:
       print("Parametrii a, b, sau c nu respectă condițiile specificate.")
  1. Exemplu de utilizare:

triplete(int(input()), int(input()), int(input()))

</syntaxhighlight>