2811 - Triplete
Cerința[edit | edit source]
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[edit | edit source]
Input:
a=2, b=4, c=8
Output:
{2,2,4}
{2,3,3}
Exemplul 2[edit | edit source]
Input:
a=-1, b=0, c=4
Output:
Parametrii a, b, sau c nu respectă condițiile specificate.
Rezolvare[edit | edit source]
<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.")
- Exemplu de utilizare:
triplete(int(input()), int(input()), int(input()))
</syntaxhighlight>