0322 - Partitii Numar 2

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se dă un număr natural n şi un număr m. Determinaţi, în ordine lexicografică, toate modalităţile de a-l scrie pe n ca sumă de cel puţin m numere naturale distincte.

Date de intrare[edit | edit source]

Fişierul de intrare partitiinumar2.in conţine pe prima linie numerele n şi m.

Date de ieşire[edit | edit source]

Fişierul de ieşire partitiinumar2.out va conţine pe pe fiecare linie câte un şir de numere naturale ordonate strict crescător, separate prin câte un spaţiu. Suma numerelor din fiecare şir este n şi sunt cel puţin m numere în fiecare şir. Şirurile vor fi afişate în ordine lexicografică.

Restricţii şi precizări[edit | edit source]

1 ≤ m < n ≤ 40 ==Exemplu==: partitiinumar2.in

10 3 partitiinumar2.out

1 2 3 4 1 2 7 1 3 6 1 4 5 2 3 5

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1">

def partitii(n, m, current, start):
  if n == 0 and len(current) >= m:
      print(" ".join(map(str, current)))
      return
  for i in range(start, n + 1):
      partitii(n - i, m, current + [i], i + 1)

if __name__ == "__main__":

  try:
      n, m = map(int, input("Introduceți n și m: ").split())
      
      partitii(n, m, [], 1)
  except ValueError:
      print("Introduceți valori numerice valide.")

</syntaxhighlight>