3995 - Partitii Numar 6: Difference between revisions

From Bitnami MediaWiki
Mraa (talk | contribs)
Pagină nouă: ==Cerința== Se dă un număr natural n. Determinați, în ordine lexicografică, toate modalitățile de a-l scrie pe n ca sumă de numere naturale impare distincte. ==Date de intrare== Programul citește de la tastatură numărul natural n. ==Date de ieșire== Programul va afișa pe câte linie a ecranului câte un șir de numere naturale impare ordonate strict crescător, separate prin câte un spațiu. Suma numerelor din fiecare șir este n. Șirurile vor fi afișate î...
 
Mraa (talk | contribs)
No edit summary
 
Line 24: Line 24:
7 9  
7 9  
==Rezolvare==
==Rezolvare==
<syntaxhighlight lang="python3" line="1">
def generare_siruri(n, suma_curenta, sir_parcial, ultimul_numar):
def generare_siruri(n, suma_curenta, sir_parcial, ultimul_numar):
    # Verificăm dacă am atins suma dorită
    if suma_curenta == n:
        print(*sir_parcial)
        return
    elif suma_curenta > n:
        return


    # Generăm numere impare și continuăm recursiv
  # Verificăm dacă am atins suma dorită
    for i in range(ultimul_numar + 2, n + 1, 2):
  if suma_curenta == n:
        generare_siruri(n, suma_curenta + i, sir_parcial + [i], i)
      print(*sir_parcial)
      return
  elif suma_curenta > n:
      return
  # Generăm numere impare și continuăm recursiv
  for i in range(ultimul_numar + 2, n + 1, 2):
      generare_siruri(n, suma_curenta + i, sir_parcial + [i], i)




if __name__ == "__main__":
if __name__ == "__main__":
    # Citim datele de intrare
    n = int(input())


    # Apelăm funcția pentru a afișa șirurile
  # Citim datele de intrare
    generare_siruri(n, 0, [], 0)
  n = int(input())
  # Apelăm funcția pentru a afișa șirurile
  generare_siruri(n, 0, [], 0)
  # Verificăm dacă nu există nicio modalitate de a-l scrie pe n ca sumă de numere naturale impare distincte
  if n % 2 == 0:
      print("imposibil")


    # Verificăm dacă nu există nicio modalitate de a-l scrie pe n ca sumă de numere naturale impare distincte
    if n % 2 == 0:
        print("imposibil")
python sumaNImpareDistincte.py
python sumaNImpareDistincte.py
</syntaxhighlight>

Latest revision as of 18:06, 11 January 2024

Cerința[edit | edit source]

Se dă un număr natural n. Determinați, în ordine lexicografică, toate modalitățile de a-l scrie pe n ca sumă de numere naturale impare distincte.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul natural n.

Date de ieșire[edit | edit source]

Programul va afișa pe câte linie a ecranului câte un șir de numere naturale impare ordonate strict crescător, separate prin câte un spațiu. Suma numerelor din fiecare șir este n. Șirurile vor fi afișate în ordine lexicografică.

Dacă nu există nicio modalitate de a-l scrie pe n ca sumă de numere naturale impare distincte se va afișa mesajul imposibil.

Restricții și precizări[edit | edit source]

1 ≤ n ≤ 40 ==Exemplu==: Intrare

16 Ieșire

1 3 5 7 1 15 3 13 5 11 7 9

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def generare_siruri(n, suma_curenta, sir_parcial, ultimul_numar):

  # Verificăm dacă am atins suma dorită
  if suma_curenta == n:
      print(*sir_parcial)
      return
  elif suma_curenta > n:
      return
  # Generăm numere impare și continuăm recursiv
  for i in range(ultimul_numar + 2, n + 1, 2):
      generare_siruri(n, suma_curenta + i, sir_parcial + [i], i)


if __name__ == "__main__":

  # Citim datele de intrare
  n = int(input())
  # Apelăm funcția pentru a afișa șirurile
  generare_siruri(n, 0, [], 0)
  # Verificăm dacă nu există nicio modalitate de a-l scrie pe n ca sumă de numere naturale impare distincte
  if n % 2 == 0:
      print("imposibil")

python sumaNImpareDistincte.py </syntaxhighlight>