3604 - Sum Cifs
Cerința
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
Programul citește de la tastatură numărul S.
Date de ieșire
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
1 ≤ S ≤ 44 ==Exemplu==: Intrare
4 Ieșire
4 13 31 40 103 130 301 310
Rezolvare
<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>