您的位置:首页 > 大数据 > 人工智能

UVA 11076-Add Again

2016-07-23 13:03 459 查看


题目链接

题目解析

题意

输入整数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
<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: