给定n个不同的数字(从0到9),找到可以使用这些数字形成的所有n个数字的总和。假设允许以0开头的数字。
例子:
Input: 1 2 3
Output: 1332
Explanation
Numbers Formed: 123 , 132 , 312 , 213, 231 , 321
123 + 132 + 312 + 213 + 231 + 321 = 1332
可以使用n位数字形成的总数是n位数字的排列总数,即factorial(n)。现在,由于形成的数字是n位数字,所以从最低有效数字到最高有效数字,每个数字将在每个位置上出现阶乘(n)/ n次。因此,位置的数字总和=(所有数字的总和)*(factor(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
C++
// C++ program to find sun of numbers formed
// by all permutations of given set of digits
#include
// 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
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
Javascript
输出:
1332
时间复杂度: O(n)
辅助空间: O(1)