📌  相关文章
📜  可以由n位排列形成的所有数字的总和

📅  最后修改于: 2021-04-30 02:25:57             🧑  作者: Mango

给定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)