4007 - Partitie AB 1
Cerinta
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 minim.
Date de intrare
Programul citește de la tastatură numerele n a b.
Date de iesire
Programul va afișa pe ecran un șir de numere ordonate crescător, reprezentând termenii ceruți.
Restrictii si precizari:
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
44 3 5
Iesire
3 3 3 5 5 5 5 5 5 5
Rezolvare:
def scrie_n_ca_suma(n, a, b):
rezultat = []
termeni_b = n // b # Numărul maxim de termeni egali cu b
# Adăugăm termenii egali cu b și apoi cu a pentru a forma suma n
for _ in range(termeni_b):
rezultat.append(b)
for _ in range(n - (termeni_b * b)):
rezultat.append(a)
return sorted(rezultat) # Returnăm șirul de termeni ordonat crescător
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 1 <= a < b < n:
rezultat = scrie_n_ca_suma(n, a, b)
print("Termenii ceruți:", rezultat)
else:
print("Verificați condițiile: 1 ≤ a < b < n!")
if __name__ == "__main__":
main()