3906 - suma perm cif

From Bitnami MediaWiki

Cerința[edit | edit source]

Scrieți un program care citește un număr natural n cu cifre distincte și care să calculeze și să afișeze suma S a tuturor numerelor obținute prin rearanjarea cifrelor lui n.

Date de intrare[edit | edit source]

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

Date de ieșire[edit | edit source]

Programul va afișa pe ecran numărul S, reprezentând suma cerută.

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

  • n are cel mult 9 cifre și are cifrele distincte.

Exemplul 1[edit | edit source]

Intrare

123

Ieșire

1332

Explicație[edit | edit source]

Numere obținute din 123 prin amestecarea cifrelor sunt 123, 132, 213, 231, 312 și 321, iar suma lor este 1332.

Exemplul 2[edit | edit source]

Intrare

1323

consola

Cifrele trebuie să fie distincte.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> from itertools import permutations

def calculate_sum_of_permutations(n):

   # Convertim numărul într-o listă de cifre
   digits = [int(digit) for digit in str(n)]
   # Verificăm dacă cifrele sunt distincte
   if len(digits) != len(set(digits)):
       raise ValueError("Cifrele trebuie să fie distincte.")
   # Generăm toate permutările cifrelor
   all_permutations = permutations(digits)
   # Calculăm suma permutărilor și le afișăm
   total_sum = 0
   for perm in all_permutations:
       perm_number = int(.join(map(str, perm)))
       total_sum += perm_number
   return total_sum

def validate_n(n):

   # Verificăm restricțiile
   return 1 <= n <= 10**9 - 1

def main():

   try:
       n = int(input("Introduceți un număr cu cifre distincte: "))
       # Verificăm restricțiile utilizând funcția separată
       if not validate_n(n):
           print("Numărul trebuie să fie mai mic decât 10^9.")
           return
       # Calculăm suma și o afișăm
       result = calculate_sum_of_permutations(n)
       print(f"Suma tuturor numerelor obținute prin rearanjarea cifrelor lui {n} este: {result}")
   except ValueError as e:
       print(e)

if __name__ == "__main__":

   main()

</syntaxhighlight>