Dados n dígitos distintos (de 0 a 9), encuentre la suma de todos los números de n dígitos que se pueden formar usando estos dígitos. Se supone que se permiten los números formados con 0 a la izquierda.
Ejemplo:
Input: 1 2 3 Output: 1332 Explanation Numbers Formed: 123 , 132 , 312 , 213, 231 , 321 123 + 132 + 312 + 213 + 231 + 321 = 1332
Los números totales que se pueden formar usando n dígitos es el número total de permutaciones de n dígitos, es decir, factorial(n). Ahora, dado que el número formado es un número de n dígitos, cada dígito aparecerá factorial (n)/n veces en cada posición desde el dígito menos significativo hasta el dígito más significativo. Por lo tanto, suma de dígitos en una posición = (suma de todos los dígitos) * (factorial(n)/n).
Considering the example digits as 1 2 3 factorial(3)/3 = 2 Sum of digits at least significant digit = (1 + 2 + 3) * 2 = 12 Similarly sum of digits at tens, hundreds place is 12. (This sum will contribute as 12 * 100) Similarly sum of digits at tens, thousands place is 12. (This sum will contribute as 12 * 1000) Required sum of all numbers = 12 + (10 * 12) + (100 * 12) = 1332
Implementación:
C++
// C++ program to find sun of numbers formed // by all permutations of given set of digits #include<stdio.h> // function to calculate factorial of a number int factorial(int n) { int f = 1; if (n==0||n==1) return 1; for (int i=2; i<=n; i++) f = f*i; return f; } // Function to calculate sum of all numbers int getSum(int arr[],int n) { // calculate factorial int fact = factorial(n); // sum of all the given digits at different // positions is same and is going to be stored // in digitsum. int digitsum = 0; for (int i=0; i<n; i++) digitsum += arr[i]; digitsum *= (fact/n); // Compute result (sum of all the numbers) int res = 0; for (int i=1, k=1; i<=n; i++) { res += (k*digitsum); k = k*10; } return res; } // Driver program to test above function int main() { // n distinct digits int arr[] = {1, 2, 3}; int n = sizeof(arr)/sizeof(arr[0]); // Print sum of all the numbers formed printf("%d", getSum(arr, n)); return 0; }
Java
// Java program to find sum // of numbers formed by all // permutations of given set // of digits import java.io.*; class GFG { // function to calculate // factorial of a number static int factorial(int n) { int f = 1; if (n == 0|| n == 1) return 1; for (int i = 2; i <= n; i++) f = f * i; return f; } // Function to calculate // sum of all numbers static int getSum(int arr[], int n) { // calculate factorial int fact = factorial(n); // sum of all the given // digits at different // positions is same and // is going to be stored // in digitsum. int digitsum = 0; for (int i = 0; i < n; i++) digitsum += arr[i]; digitsum *= (fact / n); // Compute result (sum // of all the numbers) int res = 0; for (int i = 1, k = 1; i <= n; i++) { res += (k * digitsum); k = k * 10; } return res; } // Driver Code public static void main (String[] args) { // n distinct digits int arr[] = {1, 2, 3}; int n = arr.length; // Print sum of all // the numbers formed System.out.println(getSum(arr, n)); } } // This code is contributed // by ajit
Python3
# Python3 program to find sun of # numbers formed by all permutations # of given set of digits # function to calculate factorial # of a number def factorial(n): f = 1 if (n == 0 or n == 1): return 1 for i in range(2, n + 1): f = f * i return f # Function to calculate sum # of all numbers def getSum(arr, n): # calculate factorial fact = factorial(n) # sum of all the given digits at # different positions is same and # is going to be stored in digitsum. digitsum = 0 for i in range(n): digitsum += arr[i] digitsum *= (fact // n) # Compute result (sum of # all the numbers) res = 0 i = 1 k = 1 while i <= n : res += (k * digitsum) k = k * 10 i += 1 return res # Driver Code if __name__ == "__main__": # n distinct digits arr = [1, 2, 3] n = len(arr) # Print sum of all the numbers formed print(getSum(arr, n)) # This code is contributed by ita_c
C#
// C# program to find sum // of numbers formed by all // permutations of given set // of digits using System; class GFG { // function to calculate // factorial of a number static int factorial(int n) { int f = 1; if (n == 0|| n == 1) return 1; for (int i = 2; i <= n; i++) f = f * i; return f; } // Function to calculate // sum of all numbers static int getSum(int []arr, int n) { // calculate factorial int fact = factorial(n); // sum of all the given // digits at different // positions is same and // is going to be stored // in digitsum. int digitsum = 0; for (int i = 0; i < n; i++) digitsum += arr[i]; digitsum *= (fact / n); // Compute result (sum // of all the numbers) int res = 0; for (int i = 1, k = 1; i <= n; i++) { res += (k * digitsum); k = k * 10; } return res; } // Driver Code static public void Main () { // n distinct digits int []arr = {1, 2, 3}; int n = arr.Length; // Print sum of all // the numbers formed Console.WriteLine(getSum(arr, n)); } } // This code is contributed // by akt_mit
PHP
<?php // PHP program to find sum // of numbers formed by all // permutations of given set // of digits function to // calculate factorial of a number function factorial($n) { $f = 1; if ($n == 0||$n == 1) return 1; for ($i = 2; $i <= $n; $i++) $f = $f * $i; return $f; } // Function to calculate // sum of all numbers function getSum($arr,$n) { // calculate factorial $fact = factorial($n); // sum of all the given // digits at different // positions is same and // is going to be stored // in digitsum. $digitsum = 0; for ($i = 0; $i < $n; $i++) $digitsum += $arr[$i]; $digitsum *= ($fact / $n); // Compute result (sum // of all the numbers) $res = 0; for ($i = 1, $k = 1; $i <= $n; $i++) { $res += ($k * $digitsum); $k = $k * 10; } return $res; } // Driver Code // n distinct digits $arr = array(1, 2, 3); $n = sizeof($arr); // Print sum of all // the numbers formed echo getSum($arr, $n); // This code is contributed by ajit ?>
Javascript
<script> // Javascript program to find sum of // numbers formed by all permutations // of given set of digits // Function to calculate // factorial of a number function factorial(n) { let f = 1; if (n == 0 || n == 1) return 1; for (let i = 2; i <= n; i++) f = f * i; return f; } // Function to calculate // sum of all numbers function getSum(arr, n) { // Calculate factorial let fact = factorial(n); // Sum of all the given // digits at different // positions is same and // is going to be stored // in digitsum. let digitsum = 0; for (let i = 0; i < n; i++) digitsum += arr[i]; digitsum *= (fact / n); // Compute result (sum // of all the numbers) let res = 0; for(let i = 1, k = 1; i <= n; i++) { res += (k * digitsum); k = k * 10; } return res; } // Driver code // n distinct digits let arr = [1, 2, 3]; let n = arr.length; // Print sum of all // the numbers formed document.write(getSum(arr, n)); // This code is contributed by susmitakundugoaldanga </script>
1332
Complejidad temporal: O(n)
Espacio auxiliar: O(1)
Este artículo es una contribución de Harsh Agarwal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA