HDU 6463.超级无敌简单题-卡边界的暴力 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)

2022-12-03,,,,

超级无敌简单题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 570    Accepted Submission(s): 274

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

 
Source
字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛
 
 
代码:

 //
#include<bits/stdc++.h>
using namespace std;
const int maxn=+;
int ans[maxn];
int main()
{
int n=;
for(int i=;i<=1e6+4e4+5e3;i++){
int t=,cnt=i;
while(){
int a[];
int h=;
while(cnt){
a[++h]=cnt%;
cnt/=;
}
int ret=;
for(int i=;i<=h;i++)
ret+=a[i]*a[i];
if(ret==){
ans[++n]=i;
//cout<<n<<" "<<i<<endl;
break;
}
else cnt=ret;
t++;
if(t==) break;
}
}
//cout<<n<<endl;
int q;
scanf("%d",&q);
while(q--){
int x;
scanf("%d",&x);
cout<<ans[x]<<endl;
}
}

HDU 6463.超级无敌简单题-卡边界的暴力 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)的相关教程结束。

《HDU 6463.超级无敌简单题-卡边界的暴力 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛).doc》

下载本文的Word格式文档,以方便收藏与打印。