zoukankan      html  css  js  c++  java
  • PAT 2020五一线上测试赛 7-2 三阶幸福数 (20分)

    7-2 三阶幸福数 (20分)
     

    对一个十进制数的各位数字做一次立方和,称作一次迭代。如果一个十进制数能通过 h 次迭代得到 1,就称该数为三阶幸福数,迭代的次数 h 称为幸福度。例如 1579 经过 1 次迭代得到 1198,2 次迭代后得到 1243,3 次迭代后得到 100,最后得到 1。则 1579 是幸福数,其幸福度为 4。

    另一方面,如果一个大于1的数字经过数次迭代后进入了死循环,那这个数就不幸福。例如 97 迭代得到 1072、352、160、217、352、…… 可见 352 到 217 形成了死循环,所以 97 就不幸福,而 352 就是它最早遇到的循环点。

    本题就要求你编写程序,判断一个给定的数字是否有三阶幸福。

    输入格式:

    输入在第一行给出一个不超过 100 的正整数 N,随后 N 行,每行给出一个不超过 1 的正整数。

    输出格式:

    对于每一个输入的数字,如果其是三阶幸福数,则在一行中输出它的幸福度;否则输出最早遇到的循环点。

    输入样例:

    3
    1579
    97
    1
    
     

    输出样例:

    4
    352
    0
    题解
    按题目的要求模拟,对于循环的用一个bool数组标记,数组是否重复出现过。

    AC代码:
    #include<bits/stdc++.h>
    using namespace std;
    bool v[100005];
    int main()
    {
        int n;
        cin>>n;
        while(n--){
            int xx;
            cin>>xx;
            memset(v,0,sizeof(v));
            v[xx]=1;
            int h=0;
            
            int s=0;
            if(xx==1){
                cout<<0<<endl;
                continue;
            }
            int x=xx;
            while(1){
                if(s==1){
                    cout<<h<<endl;
                    break;
                }
                s=0;        
                int y=x;
                h++;
                while(y>=10){
                    int a=y/10;
                    int b=y%10;
                    s+=(b*b*b);
                    y=a;
                }
                s+=(y*y*y);
                x=s;
            //    cout<<s<<endl;
                if(v[x]){
                    cout<<x<<endl;
                    break;
                }
                v[x]=1;
            }    
        }
        return 0;
     } 
     
  • 相关阅读:
    css实现一行居中显示,两行靠左显示
    杂记
    去除inline-block元素间间距的N种方法
    ps快捷键
    python3使用ltp语言云
    WEKA “Detailed Accuracy By Class”和“Confusion Matrix”含义
    分类问题的精确率和召回率 (准确率)
    修改文件所属组和用户
    linux添加新用户
    linux新建用户tab无法补全命令
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/13270523.html
Copyright © 2011-2022 走看看