0323 - Partitii Numar 3

From Bitnami MediaWiki

Cerinţa

Se dă un număr natural n şi un interval [a,b]. Determinaţi, în ordine lexicografică, toate modalităţile de a-l scrie pe n ca sumă de numere naturale din intervalul [a,b].

Date de intrare

Fişierul de intrare partitiinumar3.in conţine pe prima linie numerele n, a şi b.

Date de ieşire

Fişierul de ieşire partitiinumar3.out va conţine pe pe fiecare linie câte un şir de numere naturale din intervalul [a,b], ordonate crescător, separate prin câte un spaţiu. Suma numerelor din fiecare şir este n. Şirurile vor fi afişate în ordine lexicografică.

Restricţii şi precizări

1 ≤ a < b < n ≤ 40 ==Exemplu==: partitiinumar3.in

10 2 4 partitiinumar3.out

2 2 2 2 2 2 2 2 4 2 2 3 3 2 4 4 3 3 4

Rezolvare

<syntaxhighlight lang="python3" line="1"> def partitii_n(n, a, b, solutie):

  if n == 0:
      print(" ".join(map(str, solutie)))
      return
  for i in range(a, min(b + 1, n + 1)):
      partitii_n(n - i, i, b, solutie + [i])

if __name__ == "__main__":

  # Citim numerele n, a și b din fișierul de intrare
  with open("partitiinumar3.in", "r") as f:
      n, a, b = map(int, f.readline().split())
  # Apelăm funcția de partizionare și afișăm rezultatul în fișierul de ieșire
  with open("partitiinumar3.out", "w") as g:
      partitii_n(n, a, b, [])

python partitiinumar3.py </syntaxhighlight>