题目解析
题意
输入整数N(1≤N≤12),求N个数字(0~9)构成的不重复的全排列的和。输入N为0时,程序结束。
思路
平均数思想
所求结果s=每一位的平均数×排列数×N个1
Example:
<1 1 2>
代码
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
#define ULL unsigned long long
long long a[10],fac[13];
long long c[13]={0,1,11,111,1111,11111,111111,1111111,
11111111,111111111,1111111111,11111111111,111111111111
};
int main(){
int N,num,res;
ULL ans;
fac[0]=1;
for(int i=1;i<=12;i++)//求阶乘
fac[i]=i*fac[i-1];
while(~scanf("%d",&N),N){
res=0;
memset(a,0,sizeof(a));
for(int i=0;i<N;i++){
scanf("%d",&num);
res+=num;
a[num]++;
}
ans=fac[N-1]*res;
for(int i=0;i<10;i++)
ans/=fac[a[i]];
cout<<ans*c[N]<<endl;
}
return 0;
}