UOJ Logo Universal Online Judge

UOJ

#22. 吉祥数(ghillie)

统计

[问题描述]

为了迎接圣诞,信息学兴趣小组的同学在辅导老师的带领下,举办了一个盛大的晚会,晚会的第一项内容是做游戏:猜数。老师给每位同学发一张卡片,每张卡片上都有一个编号(此编号为非负数,且小于255),每个编号互不相同。老师制定了以下的游戏规则:第一轮,每位同学将自己卡片上编号的各位数字进行平方后再相加得到一组新数,编号在这组新数中出现的同学淘汰出局,第二轮,余下的同学再将编号的各位数字进行立方相加得到一组新数,编号在这组新数中出现的同学再淘汰出局,第三轮,余下的同学再将编号的各位数字进行4次方相加得到一组新数,编号在这组新数中出现的同学再淘汰出局,……,以此类推,经过n轮后,仍留下来的同学,将获得圣诞特别礼物,卡片上的数即为2007年吉祥数。(假定班级人数不超过200人)

[输入文件]

输入文件ghillie .in 有两行,第1行为1个正整数n(n<8),表示有n轮游戏,第二行是卡片上互不相同的编号。 输出:剩下来的各个吉祥数,按从小到大顺序输出,每两个数之间有一个空格。

[输出文件]

输出文件ghillie .out是1行,为剩下来的各个吉祥数,按从小到大顺序输出,每两个数之间有一个空格。

[输入样例]

1
24 123 2 12 20 14 4 6 36 72

[输出样例]

2 6 12 24 72 123
//如何用SCANF判断行未
#include
#include
#include
#include
using namespace std;
int a[10][100];
int main()
{  int x,n,y;
   char c;
//    freopen("a.txt","r",stdin);
    scanf("%d",&n);//一共n行
    for(int i=1;i<=n;i++)
    { 
      while(1)
      { y=scanf("%d%c",&x,&c);//第二个是字符
        a[i][0]++;//数据个数
        a[i][ a[i][0] ]=x;
        if(c=='\n' || y==1) break;//第二个字符是换行,说明是行未
        //如果文件最后一行没有回车,那么无法读到回车符,只能读到一个数据,SCANF函数值是1
      }
   }
   //输出测试
  for(int i=1;i<=n;i++)
   { printf("%d:",i);
     for(int j=1;j<=a[i][0];j++)
      printf("%d ",a[i][j]);
     printf("\n");
   }     
}