0695 - SumAll

From Bitnami MediaWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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>