3604 - Sum Cifs: Difference between revisions
Pagină nouă: ==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. ==Restri... |
No edit summary |
||
Line 25: | Line 25: | ||
310 | 310 | ||
==Rezolvare== | ==Rezolvare== | ||
<syntaxhighlight lang="python3" line="1"> | |||
def cifre_distincte(numar): | def cifre_distincte(numar): | ||
return len(set(str(numar))) == len(str(numar)) | |||
def genereaza_permutari(cifre, suma_dorita, permutare_curenta=[]): | 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__": | 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 | python sum_cifre_distincte.py | ||
</syntaxhighlight> |
Latest revision as of 18:11, 11 January 2024
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>