0695 - SumAll
Cerința[edit | edit source]
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[edit | edit source]
Fișierul de intrare sumall.in
conține pe prima linie numărul N
.
Date de ieșire[edit | edit source]
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[edit | edit source]
0 < N < 1019
Exemplu:[edit | edit source]
sumall.in
123
sumall.out
1332
Explicație[edit | edit source]
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:[edit | edit source]
sumall.in
788
sumall.out
2553
Explicație[edit | edit source]
Toate numerele distincte ce se pot forma cu cifrele 7
, 8
, 8
sunt:
788
, 878
, 887
788 + 878 + 887 = 2553
Rezolvare[edit | edit source]
<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>