0695 - SumAll
Cerința
Fie N un număr natural format din cifre nenule.
Să se determine suma tuturor numerelor distincte ce se pot forma cu toate cifrele numărului N.
Date de intrare
Fișierul de intrare sumall.in conține pe prima linie numărul N.
Date de ieșire
Fișierul de ieșire sumall.out va conţine pe prima linie suma tuturor numerelor distincte ce se pot forma cu toate cifrele numărului N.
Restricții și precizări
0 < N < 1019
Exemplu:
sumall.in
123
sumall.out
1332
Explicație
Toate numerele distincte ce se pot forma cu cifrele 1, 2, 3 sunt:
123, 132, 213, 231, 312, 321.
123 + 132 + 213 + 231 + 312 + 321 = 1332
Exemplu:
sumall.in
788
sumall.out
2553
Explicație
Toate numerele distincte ce se pot forma cu cifrele 7, 8, 8 sunt:
788, 878, 887
788 + 878 + 887 = 2553
Rezolvare
<syntaxhighlight lang="python3"> def generate_numbers(n, digits, used_digits, current_number, numbers):
if len(current_number) == len(digits):
numbers.append(int(current_number))
return
for digit in digits:
if digit not in used_digits:
used_digits[digit] = True
current_number += digit
generate_numbers(n, digits, used_digits, current_number, numbers)
current_number = current_number[:-1]
used_digits[digit] = False
def calculate_sum_of_distinct_numbers(n):
digits = [int(d) for d in str(n)]
numbers = [] # List to store distinct numbers
used_digits = {} # Dictionary to track used digits
generate_numbers(n, digits, used_digits, "", numbers)
numbers.sort()
sum_of_distinct_numbers = 0
for i in range(len(numbers)):
if i == 0 or numbers[i] != numbers[i - 1]:
sum_of_distinct_numbers += numbers[i]
return sum_of_distinct_numbers
def main():
with open("sumall.in", "r") as input_file:
n = int(input_file.readline())
sum_of_distinct_numbers = calculate_sum_of_distinct_numbers(n)
with open("sumall.out", "w") as output_file:
output_file.write(str(sum_of_distinct_numbers))
if __name__ == "__main__":
main()
</syntaxhighlight>