zoukankan      html  css  js  c++  java
  • 吉祥数

    题目描述

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

    输入

    第1行为1个正整数n(n<8),表示有n轮游戏

    第二行是卡片上互不相同的编号,以空格隔开。

    输出

    输出一行,为剩下来的各个吉祥数,按从小到大顺数输出,每两个数之间有一个空格。

    样例输入

    1
    24 123 2 12 20 14 4 6 36 72
    

    样例输出

    2 6 12 24 72 123

    提示

    N<8

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int n;
    long long a[201],m,b[201],mb;
    long long gen(int x,int y)
    {
        long long res=0;
        while(x>0)
        {
            res=res+pow(x%10,y+1);
            x/=10;
        }
        return res;
    }
    int main()
    {
        scanf("%d",&n);
        int tmp;
        while(scanf("%d",&tmp)!=EOF)
        {
            if(tmp==-1) break;
            a[++m]=tmp; 
        }
        sort(a+1,a+1+m);
        for(int i=1;i<=n;i++)
        {
            mb=0;
            for(int j=1;j<=m;j++)
                if(a[j]!=0)
                    b[++mb]=gen(a[j],i);
            for(int j=1;j<=mb;j++)
                for(int k=1;k<=m;k++)
                    if(b[j]==a[k])
                        a[k]=-1;
        }
        for(int i=1;i<=m;i++)
            if(a[i]!=-1)
                printf("%lld ",a[i]);
        return 0;
    }
  • 相关阅读:
    如何使用CslaGen生成CSLA DAL层代码
    DefaultCellStyle.NullValue与CellEndEdit
    列Readonly的问题
    IOS谓词NSPredicate
    项目展示新浪微博客户端
    KVO的概述与使用
    iOS设计模式——委托(delegate)
    ScrollView
    UIButton
    ScrollView图片的放大缩小
  • 原文地址:https://www.cnblogs.com/LJA001162/p/13169935.html
Copyright © 2011-2022 走看看