题目:L2-029 特立独行的幸福 (25 分)
题目:题目详情 - L2-029 特立独行的幸福 (25 分) (pintia.cn)
大意
对一个十进制数的各位数字做一次平方和,称作一次迭代。如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数。1 是一个幸福数。此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68,3 次迭代后得到 100,最后得到 1。则 19 就是幸福数。显然,在一个幸福数迭代到 1 的过程中经过的数字都是幸福数,它们的幸福是依附于初始数字的。例如 82、68、100 的幸福是依附于 19 的。而一个特立独行的幸福数,是在一个有限的区间内不依附于任何其它数字的;其独立性就是依附于它的的幸福数的个数。如果这个数还是个素数,则其独立性加倍。例如 19 在区间[1, 100] 内就是一个特立独行的幸福数,其独立性为 2×4=8。
另一方面,如果一个大于1的数字经过数次迭代后进入了死循环,那这个数就不幸福。例如 29 迭代得到 85、89、145、42、20、4、16、37、58、89、…… 可见 89 到 58 形成了死循环,所以 29 就不幸福。
思路
按照并查询思路
解题图形
坑点
需要判断死循环
步骤一;
int getfa(int x)//得到各位数字的平方和
{int sum=0;while(x){sum=sum+(x%10)*(x%10);x=x/10;}return sum;
}
int find_root(int x)//找到最终指向的根如果这个数是幸福数,则最终一定会指到1,1的根就是自己
{int ans=x;int i=0;while(fa[ans]!=ans){ans=fa[ans];i++;if(i>=10000)return -1;}return ans;
}
bool fun(int x,int n,int m)//判断nm范围内否有数字指向x,即判断是否独立
{for(int i=n;i<=m;i++)if(fa[i]==x)return false;return true;
}
bool sushu(int x)//判断素数
{for(int i=2;i*i<=x;i++)if(x%i==0)return false;return true;
}
步骤2
int main()
{int n,m;cin>>n>>m;int c=0;for(int i=1;i<=10000;i++)//初始化令所有数字先指向自己 fa[i]=i;for(int i=1;i<=10000;i++)//令所有数字指向自己的各位平方和fa[i]=getfa(i);for(int i=n;i<=m;i++){if(fun(i,n,m)&&find_root(i)==1)//如果找根能找到1,而且n到m没有数字指向它,就是特立独行的幸福数{ cout<<i<<" ";int flag=1,x=i;while(getfa(x)!=1)//计算迭代次数{x=getfa(x);flag++; }if(sushu(i))flag*=2;cout<<flag<<endl; c++;//记录输出了多少个特立独行的幸福数} }if(c==0)cout<<"SAD"<<endl; return 0;
}
完整代码
#include<bits/stdc++.h>
using namespace std;
int fa[10010];
int getfa(int x)//得到各位数字的平方和
{int sum=0;while(x){sum=sum+(x%10)*(x%10);x=x/10;}return sum;
}
int find_root(int x)//找到最终指向的根如果这个数是幸福数,则最终一定会指到1,1的根就是自己
{int ans=x;int i=0;while(fa[ans]!=ans){ans=fa[ans];i++;if(i>=10000)return -1;}return ans;
}
bool fun(int x,int n,int m)//判断nm范围内否有数字指向x,即判断是否独立
{for(int i=n;i<=m;i++)if(fa[i]==x)return false;return true;
}
bool sushu(int x)//判断素数
{for(int i=2;i*i<=x;i++)if(x%i==0)return false;return true;
}
int main()
{int n,m;cin>>n>>m;int c=0;for(int i=1;i<=10000;i++)//初始化令所有数字先指向自己 fa[i]=i;for(int i=1;i<=10000;i++)//令所有数字指向自己的各位平方和fa[i]=getfa(i);for(int i=n;i<=m;i++){if(fun(i,n,m)&&find_root(i)==1)//如果找根能找到1,而且n到m没有数字指向它,就是特立独行的幸福数{ cout<<i<<" ";int flag=1,x=i;while(getfa(x)!=1)//计算迭代次数{x=getfa(x);flag++; }if(sushu(i))flag*=2;cout<<flag<<endl; c++;//记录输出了多少个特立独行的幸福数} }if(c==0)cout<<"SAD"<<endl; return 0;
}
总结
对于这类题,更重要的是思维和知识储存量
题目:L2-029 特立独行的幸福 (25 分)相关推荐
- 【CCCC】L2-029 特立独行的幸福 (25分),模拟题,set用法
problem L2-029 特立独行的幸福 (25分) 对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 ...
- 特立独行的幸福 (25 分)
特立独行的幸福 (25 分) 对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 ...
- L2-029 特立独行的幸福 (25 分)-PAT 团体程序设计天梯赛 GPLT
对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68, ...
- 特立独行的幸福 (25分)
对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68, ...
- 7-120 特立独行的幸福 (25分)
对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68, ...
- l2-029 特立独行的幸福 (25分)_霜降后盆栽幸福树,调整4个地方,不用再怕掉叶子了...
原标题:霜降后盆栽幸福树,调整4个地方,不用再怕掉叶子了 幸福树,是一款颜值非常高的家庭盆栽绿植,其枝叶四季常青,在室内搁置的情况下,不但能够净化空气,美化家居,同时还能给人们带来美好的祝福,毕竟在传 ...
- 7-113 特立独行的幸福 (20 分) C语言
对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68, ...
- 【题目分析】1059 Prime Factors (25 分)
立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given any positive integer N, you are supposed to find all of its ...
- 天梯赛L2-029 特立独行的幸福
L2-029 特立独行的幸福 (25分) 对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 ...
- 简单题 6 清点代码库 (25 分)
链接::题目详情 - L2-039 清点代码库 (25 分) (pintia.cn) 上图转自新浪微博:"阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍.请 ...
最新文章
- maya如何查看资源大纲_3DMaya大纲视图在哪查看?
- 【map】【HDOJ】5233 Gunner II
- Java1.5语言新特性简单总结
- 【Python】青少年蓝桥杯_每日一题_8.19_数字组合
- Oracle中实现continue的方法
- stm32F1和stm32F4的区别
- 给Sublime Text2安装GraphQL语法高亮插件
- [杂题训练]CF1228E Another Filling the Grid(容斥),CF936C Lock Puzzle(构造)
- CompletableFuture详解~设置任务结果
- Android 隐藏ImageView
- EXTI外部中断触发:神舟IV
- Zendframework 模块加载事件触发顺序。
- JavaScript将JSON转换为字符串
- matlab如何求无穷多项乘积的极限,求极限方法小结
- 计算机科学研究的第一手段,实验研究类论文的研究方法(11种研究方法解析)...
- android免root hook框架legend
- 指数基金日涨跌幅python_Python数说指数定投策略
- UVM jelly_bean
- Java微信公众平台开发(一)——接入微信公众平台
- 中国新冠疫苗首针将于1月15日接种,正确的运输和存储可保证其安全有效
热门文章
- 织梦DedeCms网站更换域名后文章图片路径批量修改
- 华硕主板如何用u盘启动计算机,最新华硕主板bios设置u盘启动教程
- 分布式系统故障容灾治理总结
- C++语言基础——C++一本通:第四章 循环结构的程序设计:第一节 for语句:1082:求小数的某一位
- LaTeX 1软件下载安装
- 统计网站页面的访问量
- js 解析lrc文件(歌词)
- pat 训练题 7-5 基友团 (25分) 暴力判团和最大团
- JavaScript经典笔试题
- 网件rax40可以刷梅林_Netgear 网件 RAX40 AX3000规格 无线路由器 开箱拆解评测