题目:题目详情 - 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 分)相关推荐

  1. 【CCCC】L2-029 特立独行的幸福 (25分),模拟题,set用法

    problem L2-029 特立独行的幸福 (25分) 对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 ...

  2. 特立独行的幸福 (25 分)

    特立独行的幸福 (25 分) 对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 ...

  3. L2-029 特立独行的幸福 (25 分)-PAT 团体程序设计天梯赛 GPLT

    对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68, ...

  4. 特立独行的幸福 (25分)

    对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68, ...

  5. 7-120 特立独行的幸福 (25分)

    对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68, ...

  6. l2-029 特立独行的幸福 (25分)_霜降后盆栽幸福树,调整4个地方,不用再怕掉叶子了...

    原标题:霜降后盆栽幸福树,调整4个地方,不用再怕掉叶子了 幸福树,是一款颜值非常高的家庭盆栽绿植,其枝叶四季常青,在室内搁置的情况下,不但能够净化空气,美化家居,同时还能给人们带来美好的祝福,毕竟在传 ...

  7. 7-113 特立独行的幸福 (20 分) C语言

    对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68, ...

  8. 【题目分析】1059 Prime Factors (25 分)

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given any positive integer N, you are supposed to find all of its ...

  9. 天梯赛L2-029 特立独行的幸福

    L2-029 特立独行的幸福 (25分) 对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 ...

  10. 简单题 6 清点代码库 (25 分)

    链接::题目详情 - L2-039 清点代码库 (25 分) (pintia.cn) 上图转自新浪微博:"阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍.请 ...

最新文章

  1. maya如何查看资源大纲_3DMaya大纲视图在哪查看?
  2. 【map】【HDOJ】5233 Gunner II
  3. Java1.5语言新特性简单总结
  4. 【Python】青少年蓝桥杯_每日一题_8.19_数字组合
  5. Oracle中实现continue的方法
  6. stm32F1和stm32F4的区别
  7. 给Sublime Text2安装GraphQL语法高亮插件
  8. [杂题训练]CF1228E Another Filling the Grid(容斥),CF936C Lock Puzzle(构造)
  9. CompletableFuture详解~设置任务结果
  10. Android 隐藏ImageView
  11. EXTI外部中断触发:神舟IV
  12. Zendframework 模块加载事件触发顺序。
  13. JavaScript将JSON转换为字符串
  14. matlab如何求无穷多项乘积的极限,求极限方法小结
  15. 计算机科学研究的第一手段,实验研究类论文的研究方法(11种研究方法解析)...
  16. android免root hook框架legend
  17. 指数基金日涨跌幅python_Python数说指数定投策略
  18. UVM jelly_bean
  19. Java微信公众平台开发(一)——接入微信公众平台
  20. 中国新冠疫苗首针将于1月15日接种,正确的运输和存储可保证其安全有效

热门文章

  1. 织梦DedeCms网站更换域名后文章图片路径批量修改
  2. 华硕主板如何用u盘启动计算机,最新华硕主板bios设置u盘启动教程
  3. 分布式系统故障容灾治理总结
  4. C++语言基础——C++一本通:第四章 循环结构的程序设计:第一节 for语句:1082:求小数的某一位
  5. LaTeX 1软件下载安装
  6. 统计网站页面的访问量
  7. js 解析lrc文件(歌词)
  8. pat 训练题 7-5 基友团 (25分) 暴力判团和最大团
  9. JavaScript经典笔试题
  10. 网件rax40可以刷梅林_Netgear 网件 RAX40 AX3000规格 无线路由器 开箱拆解评测