4007 - Partitie AB 1
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 minim.
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 si 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
44 3 5
Iesire
3 3 3 5 5 5 5 5 5 5
Rezolvare:
<syntaxhighlight lang="python"> def validare_date(n, a, b):
if not(1 <= n <= 1000000) or not(1 <= a < b <= 1000): print("Datele introduse nu respectă condițiile.") return False return True
def gaseste_valori(n, a, b):
p, q = -1, -1
for i in range(0, n + 1): if (n - i * a) % b == 0: p = i break
q = (n - p * a) // b
return p, q
def afiseaza_valori(p, q, a, b):
for i in range(1, p + 1): print(a, end=" ")
for i in range(1, q + 1): print(b, end=" ")
print()
if __name__ == "__main__":
n, a, b = map(int, input().split())
p, q = gaseste_valori(n, a, b)
afiseaza_valori(p, q, a, b)
</syntaxhighlight>