4006 - Partitie AB: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
 
Linia 25: Linia 25:
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
def validare_date(n, a, b):
    return 1 <= n <= 1000000 and 1 <= a < b <= 1000
def scrie_n_ca_suma(n, a, b):
def scrie_n_ca_suma(n, a, b):
 
     if n - b < b:
     if n - b < b: # Verificăm dacă adăugând b depășim n
         a, b = b, a
 
         a, b = b, a # Schimbăm a și b pentru a ne asigura că b este mai mare


     rezultat = []
     rezultat = []


     termeni_a = (n - b) // a  # Numărul maxim de termeni egali cu a
     termeni_a = (n - b) // a


     for _ in range(termeni_a):
     for _ in range(termeni_a):
         rezultat.append(a)
         rezultat.append(a)


     for _ in range((n - b) - (termeni_a * a)):
     for _ in range((n - b) - (termeni_a * a)):
         rezultat.append(b)
         rezultat.append(b)


     return sorted(rezultat)  
     return sorted(rezultat)


def main():
def main():
     n = int(input("Introduceți valoarea lui n: "))
     n = int(input("Introduceți valoarea lui n: "))
     a = int(input("Introduceți valoarea lui a: "))
     a = int(input("Introduceți valoarea lui a: "))
     b = int(input("Introduceți valoarea lui b: "))
     b = int(input("Introduceți valoarea lui b: "))


     if 1 <= a < b < n:
     if validare_date(n, a, b):
 
         rezultat = scrie_n_ca_suma(n, a, b)
         rezultat = scrie_n_ca_suma(n, a, b)
         print("Termenii ceruți:", rezultat)
         print("Termenii ceruți:", rezultat)
     else:
     else:
 
         print("Verificați condițiile: 1 ≤ n ≤ 1.000.000, 1 ≤ a < b ≤ 1000!")
         print("Verificați condițiile: 1 ≤ a < b < n!")


if __name__ == "__main__":
if __name__ == "__main__":
     main()
     main()
</syntaxhighlight>
</syntaxhighlight>

Versiunea curentă din 4 ianuarie 2024 15:52

Cerința

Se dau trei numere naturale n a b, 1 ≤ a < b < n. Să se determine o modalitate de a-l scrie pe n ca sumă de termeni egali cu a sau b în care numărul de termeni egali cu a este maxim.

Date de intrare

Programul citește de la tastatură numerele n a b.

Date de ieșire

Programul va afișa pe ecran un șir de numere ordonate crescător, reprezentând termenii ceruți.

Restricții și precizări:

  • 1 ≤ n ≤ 1.000.000
  • 1 ≤ a < b ≤ 1000
  • pentru toate datele de test n poate fi scris ca sumă de termeni egali cu a și b.

Exemplu:

Intrare

40 3 5

Iesire

3 3 3 3 3 3 3 3 3 3 5 5

Rezolvare

def validare_date(n, a, b):
    return 1 <= n <= 1000000 and 1 <= a < b <= 1000

def scrie_n_ca_suma(n, a, b):
    if n - b < b:
        a, b = b, a

    rezultat = []

    termeni_a = (n - b) // a

    for _ in range(termeni_a):
        rezultat.append(a)

    for _ in range((n - b) - (termeni_a * a)):
        rezultat.append(b)

    return sorted(rezultat)

def main():
    n = int(input("Introduceți valoarea lui n: "))
    a = int(input("Introduceți valoarea lui a: "))
    b = int(input("Introduceți valoarea lui b: "))

    if validare_date(n, a, b):
        rezultat = scrie_n_ca_suma(n, a, b)
        print("Termenii ceruți:", rezultat)
    else:
        print("Verificați condițiile: 1 ≤ n ≤ 1.000.000, 1 ≤ a < b ≤ 1000!")

if __name__ == "__main__":
    main()