0323 - Partitii Numar 3

De la Universitas 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

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