0695 - SumAll

From Bitnami MediaWiki

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>