超级无敌简单题

Posted bxd123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超级无敌简单题相关的知识,希望对你有一定的参考价值。

Problem Description
通常来说,题面短的题目一般都比较难,所以我要把题面写得很长很长。
通常来说,题面短的题目一般都比较难,所以我要把题面写得很长很长。
通常来说,题面短的题目一般都比较难,所以我要把题面写得很长很长。
鸽子数字由以下过程定义:从任何正整数开始,将数字替换为其各个数位的平方和,并重复该过程,直到该数字等于1。如果不能,则这个数字不是鸽子数。
例如7是鸽子数,因为7->49->97->130->10->1。(7*7=49,4*4+9*9=97,9*9+7*7=130....如此类推)
显然1是第一个鸽子数。
有Q个询问,每个询问给出一个数k,你需要输出第k个鸽子数。
 

 

Input
第一行一个Q,代表询问的个数(Q<=100000)
接下来Q行,每行一个数字k(k<150000)
 

 

Output
每行输出一个数,代表第k个鸽子数
 

 

Sample Input
2 1 2
 

 

Sample Output
1 7

 

暴力打表即可 
在纸上进行对1-9的模拟  发现4会进入死循环 也就是到4时必不可能是
#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define LL long long
#define REP(i,N)  for(int i=0;i<(N);i++)
#define CLR(A,v)  memset(A,v,sizeof A)
//////////////////////////////////
#define N 150000+5
int ans[N];
bool judge(int x)
{
    while(x!=1&&x!=4)
    {
        int sum=0;
        while(x)
        {
            sum+=(x%10)*(x%10);
            x/=10;
        }
        x=sum;
    }
    return x==1;
}
void get(void)
{
    int cnt=1;
    ans[1]=1;
    int i=2;
    while(cnt<=150000)
    {
        if(judge(i))
            ans[++cnt]=i;
        i++;
    }
}

int main()
{
    get();
    int q;
    RI(q);
    while(q--)
    {
        int x;
        RI(x);
        printf("%d
",ans[x]);
    }
}

 

 
 
 
 

以上是关于超级无敌简单题的主要内容,如果未能解决你的问题,请参考以下文章

我是宇宙超级无敌大天才英语怎么说

将vscode打造成无敌的IDE添加自定义的snippet

将vscode打造成无敌的IDE添加自定义的snippet

我是宇宙超级无敌大天才!日语怎么说?

我就是那宇宙超级无敌大卓妞,小肥耳,妈妈说,我很乖,只是有点黄有点暴力,我最爱喝纯牛奶,是啥歌?

新浪微博python爬虫分享(一天可抓取 1300 万条数据),超级无敌