比赛 20111111 评测结果 AAAAAAAAAA
题目名称 吉祥数 最终得分 100
用户昵称 Czb。 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-11 10:48:36
显示代码纯文本
#include<stdio.h>
#include<stdlib.h>

int n,m,tmp;

int a[201],f[201],t[201],cf[10][10]={
{0},
{1,1,1,1,1,1,1,1,1,1},
{1,2,4,8,16,32,64,128,256,512},
{1,3,9,27,81,243,729,2187,6561,19683},
{1,4,16,64,256,1024,4096,16384,65536,262144},
{1,5,25,125,625,3125,15625,78125,390625,1953125},
{1,6,36,216,1296,7776,46656,279936,1679616,10077696},
{1,7,49,343,2401,16807,117649,823543,5764801,40353607},
{1,8,64,512,4096,32768,262144,2097152,16777216,134217728},
{1,9,81,729,6561,59049,531441,4782969,43046721,387420489}
};

bool b[201];

int cmp(const void *a,const void *b)
{
	return *(int *)a-*(int *)b;
}

int main()
{
	freopen("ghillie.in","r",stdin);
	freopen("ghillie.out","w",stdout);
	int i,j,k;
	scanf("%d",&n);
	while(scanf("%d",&tmp)==1)
	{
		m++;
		a[m]=f[m]=tmp;
		b[m]=true;
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			if(b[j])
			{
				t[j]=0;
				while(a[j])
				{
					t[j]+=cf[a[j]%10][i+1];
					a[j]/=10;
				}
				a[j]=f[j];
			}
		}
		for(j=1;j<=m;j++)
		{
			for(k=1;k<=m;k++)
			{
				if(t[j]==f[k])
				{
					f[k]=-1;
					b[k]=false;
				}
			}
		}
	}
	qsort(f+1,m,4,cmp);
	for(i=1;i<=m;i++)
	{
		if(f[i]>=0)
		{
			printf("%d ",f[i]);
		}
	}
	printf("\n");
	fclose(stdin);
	fclose(stdout);
	return 0;
}