首页 > 学院 > 开发设计 > 正文

UVa-11076 Add Again(平均数思想)

2019-11-08 00:47:00
字体:
来源:转载
供稿:网友
思路:平均数思想由于每个数出现在各个位的次数是一样的,所以ans=每个位的平均数*排列数*n个1如1 1 2 2   ans=((1+1+2+2)/4) * (A(4,4)/(A(2,2)*A(2,2)))*1111
#include<iostream>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const long long a[13]={0,1,11,111,1111,11111,111111,1111111,11111111,111111111,1111111111,11111111111,111111111111};long long fac[13];int main(){	int n;	int all,num;	long long ans;	int b[10];    fac[0]=1;    for(int i=1;i<=12;i++){    	fac[i]=i*fac[i-1];//把每个数阶乘的结果存到数组里	}	while(cin>>n&&n!=0){		all=0;		memset(b,0,sizeof(b));		for(int i=0;i<n;i++){			cin>>num;			all=all+num;			b[num]++;//b[num]表示num的数有几个,num为0到9		}		ans=fac[n-1]*all;		for(int i=0;i<10;++i){			ans/=fac[b[i]];		}		cout<<(unsigned long long)ans*a[n]<<endl;	}	return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表