【L2-029 特立独行的幸福】
天梯赛L2-029 特立独行的幸福
题目详情:
输入样例 1:
10 40
输出样例 1:
19 8
23 6
28 3
31 4
32 3
思路:
这个题也是借鉴了网上大佬的写法
这个题是求特立独行的幸福数和它的独立性,因为每个区间有很多幸福数,所以题目中给出了依附的定义。
我暂且把幸福数经过迭代变成1的过程中出现的数叫做过程数。
这个题就是说从A到B的过程中,每个数肯定都要经历一次判断,而且这个数不是幸福数就是循环数,首先肯定是要先求它的过程数(写一个函数),注意这里求的是区间内的过程数接下来就是循环一遍所有的数而且每个数都要进行一次迭代求它的过程数:
先判断过程数是不是1?
如果不是1,再判断是不是循环数,如何再存入v容器中。
那么第一种情况<如果是循环数呢>:那么v容器中肯定<先存入了第一次出现的数>,
所以<利用find函数>判断这个数是否在v容器中出现过<如果出现过>就证明它是循环数,直接进行下一次循环。
如果是幸福数呢:那么在过程数等于1的时候,首先把<这个等于1的过程数的初始数>标记为特立独行的幸福数。
而等于1之前肯定还是会有过程数存入v容器中,那么就将<这些过程数>都标记为不是特立独行的幸福数,并且<这些过程数>都是<依附于初始数的>
所以这个时候v容器的大小+1就是独立性的大小
如果这里看不懂没关系,结合代码去看就好啦。
详细代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 5;
int happynum(int u)//十进制数的各位数字做一次平方和
{int sum = 0;while(u){int a = u%10;sum += a*a;u = u/10;}return sum;
}
bool isprime(int u)//判断素数
{for(int i=2; i<sqrt(u); i++){if(u % i == 0)return false;}return true;
}
int visit[maxn];//特立独行幸福数为1,不特立独行幸福数为-1
int a,b;
vector<int>v;//存放依附于初始数字的幸福数
int num[maxn];//独立数
int main()
{cin>>a>>b;for(int i=a; i<=b; i++){int sum = i;//要先把i赋给sum,再用sum去迭代,否则用i迭代就不能标记i了if(visit[i] == -1)continue;while(1){sum = happynum(sum);//递归求出每次的过程数if(sum == 1)//如果是幸福数{visit[i] = 1;for(auto it=v.begin(); it!=v.end(); it++)//迭代器,把在v容器中的过程数都视为不是特立独行的visit[*it] = -1;num[i] = v.size() + 1;//把自己也要算上v.clear();//进行下次循环前把v清空break;}if(find(v.begin(),v.end(),sum) != v.end())//如果在v中找到了当前的sum,证明他是循环的数,不是幸福数{v.clear();//直接清空v容器,进行下次循环break;}v.push_back(sum);//将这个数的过程数存入v中}}int flag = 0;//是否有特立独行幸福数的标志for(int i=a; i<=b; i++){if(visit[i] == 1){cout<<i<<" ";if(isprime(i))cout<<num[i]*2<<endl;elsecout<<num[i]<<endl;flag = 1;}}if(!flag)cout<<"SAD";
}
知识总结:
知识点就还是STL容器中的vector容器,主要是思路。这个题目说白了还是和水仙花数一类的东西,还是数学性强一点吧。
【L2-029 特立独行的幸福】相关推荐
- L2-029 特立独行的幸福 (25 分)-PAT 团体程序设计天梯赛 GPLT
对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68, ...
- 【CCCC】L2-029 特立独行的幸福 (25分),模拟题,set用法
problem L2-029 特立独行的幸福 (25分) 对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 ...
- 7-3 特立独行的幸福
z作业做不出,参考网上资料自己进行修改改编的 对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 ...
- PTA习题【python】 7-5 特立独行的幸福
题目介绍 对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得 ...
- 特立独行的幸福 (25 分)
特立独行的幸福 (25 分) 对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 ...
- 天梯赛L2-029 特立独行的幸福
L2-029 特立独行的幸福 (25分) 对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 ...
- 7-113 特立独行的幸福 (20 分) C语言
对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68, ...
- 【PTA-训练day17】L2-029 特立独行的幸福 + L1-071 前世档案
L2-029 特立独行的幸福 - 递归/模拟 + 判断素数 PTA | 程序设计类实验辅助教学平台 思路: 第一层循环是边界循环 for(int i=l;i<=r;i++) 枚举每一个i 第二 ...
- GPLT 特立独行的幸福
对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68, ...
最新文章
- bash . dot using
- linux7双网卡设置,Centos 7 静态IP和双网卡配置
- python进行两个大数相加
- 浅析epoll – epoll例子以及分析
- 类模板 重载运算符 易错
- Xuggler开发教程
- angular 注入器配置_Angular2 多级注入器详解及实例
- 关于对知识的系统建立和站在更高层次进行理解的必要性
- Java 六种异常处理的陋习
- Android系统中属性值的设置和使用
- 软件类配置(六)【ubuntu16.04安装opencv3.4.1】
- html5中关于input使用方法的改变
- 成人高考计算机基础历年真题,成人高考历年真题及答案
- [2021年新鲜出炉]K8s工程师资料合辑,书籍推荐,面试题,精选文章,开源项目,PPT,视频,大厂资料
- 高等数学 - 两平面的夹角
- C语言 | 编写一个简单的定时关机程序
- ffmpeg 从现有视频中截取一段
- 安卓开发之SoundPool播放音效
- 从天问一号拍摄到高清火星影像图说起
- vcruntime140_1.dll无法继续执行代码如何修复?
热门文章
- python小说爬虫实训报告_python之新手一看就懂的小说爬虫
- 域文件服务器可不可以多个,多个域控服务器的搭建
- linux gpu 虚拟化_Windows 10通过GPU支持获得图形化Linux应用
- C语言进程(第三章,exec函数族,execl,execlp,execle,execv,execvp,execve)
- ORACLE ---开窗函数
- 操作系统不等于 Linux,六问操作系统新时代!
- 西华大学专升本计算机综合资料
- 腾讯T14级SQL首席专家开源分布式数据库架构实践手册
- c语言通讯录——动态内存版
- Linux鼠标变x,VNC 的应用及灰屏鼠标变X问题