【Description】
为了迎接圣诞,信息学兴趣小组的同学们在辅导老师的带领下,举办了一个盛大的晚会,晚会的第一项内容是做游戏:猜数。老师给每位同学发一张卡片,每张卡片上都有一个编号(此编号为非负数,且小于255),每个编号互不相同。老师制定了以下的游戏规则:
第一轮,每位同学将自己卡片上编号的各位数字进行平方后再相加得到一组新数,编号在这组新数中出现的同学淘汰出局;
第二轮,余下的同学再将编号的各位数字进行立方相加得到一组新数,编号在这组新数中出现的同学再淘汰出局;
第三轮,余下的同学再将编号的各位数字进行4次方相加得到一组新数,编号在这组新数中出现的同学再淘汰出局,依此类推,经过n轮后,仍留下来的同学,将获得圣诞特别礼物,卡片上的数即是2008年吉祥数。(假定班级人数不超过200人)
【Input】
输入文件第一行为一个整数n(1<=n<8),表示有n轮游戏。一个整数m(1<=m<=200),表示班级学生人数。
第二行是卡片上互不相同的编号,每两个编号间有一个空格。
【Output】
输出文件只有一行,为剩下来的各个吉祥数,按从小到大顺序输出,每两个数之间有一个空格。
【Sample Input】
1 10
24 123 2 12 20 14 4 6 36 72
【Sample Output】
2 6 12 24 72 123
#includeusing namespace std; int main() { int n,m,a[201],b[201],x,ge,s,power;//a数组存放卡片编号 cin>>n>>m;//n为游戏轮数 m为班级学生人数 for(int i=1;i<=m;i++) { cin>>a[i]; } for(int i=1;i<=n;i++)//循环变量i代表游戏进行到第几轮 { for(int j=1;j<=m;j++) { x=a[j];s=0;//原数字分割前 s求和需清零 while(x!=0) { ge=x%10;//取个位 x=x/10;//去个位 power=1;//重新计算各个位上的次方要清1 for(int t=1;t<=i+1;t++)//注意:循环变量t的上限取决于第几轮游戏 { power=power*ge;//计算各个位上的次方 } s=s+power;//加总各个位上的次方 } b[j]=s;//将新一轮的得到的新数字存进b数组里 } for(int i=1;i<=m;i++) { for(int j=1;j<=m;j++) { if(a[i]==b[j]) { a[i]=0;//如果新数与原数字相同 原数组里的数字赋值零表示淘汰 } } } } sort(a+1,a+m+1);//从小到大 快排 for(int i=1;i<=m;i++) { if(a[i]!=0) cout<
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)