2811 - Triplete
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.")
- Exemplu de utilizare:
triplete(int(input()), int(input()), int(input()))
</syntaxhighlight>