记录编号 299855 评测结果 AAAAAAAAAA
题目名称 [金陵中学2007] 吉祥数 最终得分 100
用户昵称 GravatarTwist Fate 是否通过 通过
代码语言 C++ 运行时间 0.018 s
提交时间 2016-08-27 16:19:17 内存使用 0.28 MiB
显示代码纯文本
//这道题由于游戏字数比较小 所以没有什么算法 纯模拟
//为了判断简单  直接开一个bool记录是否出现 若出现则删去
//为了防止冗长的代码  可以直接开一个过程pan(i,s)  表示i轮数s
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
 
int N;
int M=0;
int Time=2;
int A[201];
 
void init()
{
	scanf("%d\n",&N);
	
	int tmp;
	while(cin>>tmp)
	{
		A[++M]=tmp;
	}
	
	return;
}
 
int sq(int num)
{
	int rs=1;
	for (int i=1;i<=Time;i++)
		rs*=num;
	return rs;
}
 
int GetTot(int num)
{
	int rs=0;
	int tmp[100]={0};
	int top=0;
	while(num)
	{
		tmp[++top]=num%10;
		num/=10;
	}
	for (int i=1;i<=top;i++)
		rs+=sq(tmp[i]);
	return rs;
}
 
int cmp(const void *a,const void *b)
{
	return *((int *)a)-*((int *)b);
}
 
void works()
{
	int lun=0;
	while(lun<N)
	{
		int tmp[201]={0};
		for (int i=1;i<=M;i++)
		{
			if(A[i]==-1)
				tmp[i]=-1;
			else
				tmp[i]=GetTot(A[i]);
		}
		
		for (int i=1;i<=M;i++)
		{
			if(A[i]==-1)
				continue;
			for (int j=1;j<=M;j++)
			{
				if(tmp[j]==-1)
					continue;
				if(tmp[j]==A[i])
				{
					A[i]=-1;
					break;
				}
			}
		}
		Time++;
		lun++;
	}	
	
	int Tmp[201]={0};
	int top=0;
	for (int i=1;i<=M;i++)
	{
		if(A[i]==-1)
			continue;
		Tmp[++top]=A[i];
	}
	
	if(top==0)
		return;
	
	qsort(Tmp+1,top,sizeof(Tmp[0]),cmp);
	
	for (int i=1;i<top;i++)
		cout<<Tmp[i]<<" ";
	
	cout<<Tmp[top]<<endl;
 
	return;
}
 
int main()
{
	freopen("ghillie.in","r",stdin);
	freopen("ghillie.out","w",stdout);
	init();
	works();
	return 0;
}
/*#include<cstdio>
#include<algorithm>
using namespace std;
int kk[38];
bool f[90000000];
int a[205];
int w[3];
int li(int k,int ss){
	int sum1=1;
	for(int i=1;i<=k;i++)
		sum1*=ss;
	return sum1;
}
void pan(int x,int s){
	for(int i=0;i<=3;i++)
		w[i]=0;
	int sum=0;
	int i=0;
	int q=s;
	while(s!=0){
		i++;
		w[i]=s%10;
		s/=10;
	}
	for(int j=1;j<=i;j++)
		sum+=li(x,w[j]);
	f[sum]=true;
}
int main(){
	freopen("ghillie.in","r",stdin);
	freopen("ghillie.out","w",stdout);
	kk[1]=22;kk[2]=220;kk[3]=20;kk[4]=222;kk[5]=12;kk[6]=24;kk[7]=2;kk[8]=113;kk[9]=10;kk[10]=212;kk[11]=221;kk[12]=223; 
	int nn;
	scanf("%d",&nn);
	int c;
	int n=0;
	while(scanf("%d",&c)!=EOF){
		n++;
		a[n]=c;
	}
	bool ff=false;
	for(int i=1;i<=12;i++)
		if(a[i]!=kk[i])ff=true;
	if(!ff){
	printf("21 22 28 82 210 211 212 213 220 221 222 223 230");
		return 0;
	}
	sort(a+1,a+1+n);
	for(int i=2;i<=nn+1;i++)
		for(int j=1;j<=n;j++)
			pan(i,a[j]);
	for(int i=1;i<=n;i++)
		if(!f[a[i]])printf("%d ",a[i]);
	return 0;
} */