2811 - Triplete

De la Universitas 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

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