4007 - Partitie AB 1

From Bitnami MediaWiki

Cerința[edit | edit source]

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[edit | edit source]

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

Date de ieșire[edit | edit source]

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

Restricții si precizări:[edit | edit source]

  • 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:[edit | edit source]

Intrare

44 3 5

Iesire

3 3 3 5 5 5 5 5 5 5

Rezolvare:[edit | edit source]

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