3906 - suma perm cif

De la Universitas MediaWiki

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

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