3604 - Sum Cifs

From Bitnami MediaWiki

Cerința[edit | edit source]

Dându-se un număr natural nenul S, să se afișeze în ordine crescătoare toate numerele naturale cu cifre distincte care au suma cifrelor egală cu S.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul S.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran pe câte o linie și în ordine crescătoare numerele de cifre distincte care au suma cifrelor egală cu S. Dacă problema nu are nicio soluție, atunci se va afișa doar valoarea -1.

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

1 ≤ S ≤ 44 ==Exemplu==: Intrare

4 Ieșire

4 13 31 40 103 130 301 310

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def cifre_distincte(numar):

  return len(set(str(numar))) == len(str(numar))

def genereaza_permutari(cifre, suma_dorita, permutare_curenta=[]):

  if sum(permutare_curenta) == suma_dorita:
      numar = int("".join(map(str, permutare_curenta)))
      if cifre_distincte(numar):
          print(numar)
  elif sum(permutare_curenta) < suma_dorita:
      for cifra in cifre:
          genereaza_permutari(cifre, suma_dorita, permutare_curenta + [cifra])

if __name__ == "__main__":

  # Citirea sumei dorite
  S = int(input())
  # Cifrele disponibile pentru permutare
  cifre = list(range(1, 10))
  # Generarea și afișarea permutărilor
  genereaza_permutari(cifre, S)
  # Afisarea -1 daca nu exista solutie
  if cifre_distincte(S):
      print(-1)

python sum_cifre_distincte.py </syntaxhighlight>