3158 - numere123
Cerința
Se citește un număr natural n având cifrele diferite două câte două. Afișați în ordine crescătoare numerele care se pot obține din cifrele lui n și care au același număr de cifre ca n.
Date de intrare
Programul citește de la tastatură numărul n.
Date de ieșire
Programul va afișa pe ecran numerele cerute, câte unul pe fiecare rând.
Restricții și precizări
1 ≤ n ≤ 1.000.000.000nare toate cifrele distincte
Exemplul 2
Intrare
483
Ieșire
348 384 438 483 834 843
Exemplul 2
Intrare
443
consola
Numărul trebuie să fie între 1 și 1.000.000.000 și să aibă cifre distincte.
Rezolvare
<syntaxhighlight lang="python3" line="1"> def are_restrictii(n):
return 1 <= n <= 1000000000 and len(set(str(n))) == len(str(n))
def permuteaza_cifrele(cifre):
if len(cifre) == 1:
return [cifre]
permutari = []
for i in range(len(cifre)):
cifre_ramase = cifre[:i] + cifre[i + 1:]
for p in permuteaza_cifrele(cifre_ramase):
permutari.append([cifre[i]] + p)
return permutari
def main():
n = int(input("Introduceți un număr n cu cifre distincte: "))
if not are_restrictii(n):
print("Numărul trebuie să fie între 1 și 1.000.000.000 și să aibă cifre distincte.")
return
cifre_str = str(n) cifre_lista = [int(cifra) for cifra in cifre_str] toate_permutările = permuteaza_cifrele(cifre_lista)
număr_cifre_n = len(cifre_lista)
numere_rezultate = []
for permutare in toate_permutările:
if permutare[0] != 0: # Evităm numerele cu zero în frunte
număr = int(.join(map(str, permutare)))
if len(str(număr)) == număr_cifre_n:
numere_rezultate.append(număr)
numere_rezultate.sort()
print("Numerele în ordine crescătoare cu aceleași cifre ca și n:")
for număr in numere_rezultate:
print(număr)
if __name__ == "__main__":
main()
</syntaxhighlight>