3906 - suma perm cif

From Bitnami MediaWiki
Revision as of 21:42, 9 December 2023 by Gabii (talk | contribs) (am adaugat explicatia)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

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

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

Date de ieșire

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

Restricții și precizări

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

Exemplul 1

Intrare

123

Ieșire

1332

Explicație

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

Exemplul 2

Intrare

1323

consola

Cifrele trebuie să fie distincte.

Rezolvare

<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>