3604 - Sum Cifs
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>