对一个十进制数的各位数字做一次平方和,称作一次迭代。如果一个十进制数能通过若干次迭代得到 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 就不幸福。

本题就要求你编写程序,列出给定区间内的所有特立独行的幸福数和它的独立性。

/*
解题思路:
首先有一个数a,我对它进行迭代,那么它就有两种可能
一是 重复循环:
    在这种情况下, 迭代路径上的所有数都不是幸福数,用Sum数组记录(用-1表示) 
    同时我对这一条路上的所有数值(例如 b c....)都进行标记 -1(要想实现这么一个操作就得先递归,再赋值),那么我要是对其他数迭代碰到了b,我就可以直接停止迭代了,因为b后面的路都走过了。  这样子就减少了时间复杂度 
二是 最后等于1 :
    说明从a到1这一条路上都是幸福数,也用Sum记录幸福值 。这里还要有一个操作这一条路径上,除了a,其他数都是非特立独行的,用flag2数组记录下来。 
    
最后输出的时候,遍历区间内每一个值,判断Sum值和flag2的值,符合的话再判断是不是素数即可 
*/


#include<bits/stdc++.h>
using namespace std;
int Sum[10010];//各值的幸福数
bool flag[10010];//用来标记可能存在的循环
int flag2[10010];//用来标记非特立独行的幸福数
int Sushu(int a)//判断素数
{if(a<2) return 0;if(a==2||a==3) return 1;if(a%6!=5&&a%6!=1) return 0;int temp=floor(sqrt(a+0.5));for(int i=5;i<=temp;i+=6){if(a%i==0||a%(i+2)==0) return 0;}return 1;
}
int DG(int a)
{//递归结束的四种可能 if(!flag[a]) flag[a]=true;//判断有没有循环出现,标记每一次迭代的数字 else return -1;//如果重复则循环结束,回溯回去都标记成-1 if(a==1) return 0;//正常迭代到 1 if(Sum[a]==-1) return -1;//这个数是非幸福数,可以停止迭代 if(Sum[a]!=0&&Sum[a]!=-1) return Sum[a];// 这个数是幸福数,可以停止迭代 //进行迭代计算 int sum=0;int a1=a;while(a1!=0){int b=a1%10;sum+=b*b;a1=a1/10;}int temp=DG(sum);//先递归,再赋值 flag2[sum]=1;//标记非特立独行的数(包括非幸福数) if(temp==-1) Sum[a]=-1;//返回是-1,说明当前值最后循环了 else Sum[a]=temp+1;//要么正常迭代到1,要么遇到已经记录过的幸福值。 return Sum[a];}
int main(void)
{int flag1=0;//用来标记区间内是否存在特立独行的幸福数 memset(Sum,0,sizeof(Sum));memset(flag2,0,sizeof(flag2));int n,m;cin>>n>>m;//遍历区间内的每一个数值 for(int i=n;i<=m;i++){memset(flag,0,sizeof(flag));//标记循环重复的数值 DG(i);}for(int i=n;i<=m;i++){int num=Sum[i];if(num!=-1&&!flag2[i]){if(Sushu(i)) num*=2;cout<<i<<" "<<num<<endl;flag1++;}}if(flag1==0) cout<<"SAD"<<endl;return 0;
}

L2-029 特立独行的幸福 (递归) 有代码详细解析相关推荐

  1. Apollo Planning决策规划算法代码详细解析 (5):规划算法流程介绍

    之前的章节介绍了planning模块的整体框架,经过scenario与stage的选择,便进入了具体的task任务,由一系列配置好的task组成了具体的规划算法,本章以apollo中的PublicRo ...

  2. Apollo Planning决策规划算法代码详细解析 (1):Scenario选择

    本文重点讲解Apollo代码中怎样配置Scenario以及选择当前Scenario,Scenario场景决策是Apollo规划算法的第一步,本文会对代码进行详细解析,也会梳理整个决策流程,码字不易,喜 ...

  3. DophinScheduler ui部分 核心代码详细解析——重中之重的src文件夹里究竟有何种玄机

    2021SC@SDUSC 文章目录 一.整体结构 二.具体细节 1.components 2.images 3.js 1.dag-canvas 2.contextMenu 3.nodeStatus.j ...

  4. Apollo Planning决策规划算法代码详细解析 (2):Scenario执行

    上一章节讲Scenario的决策逻辑,当确认当前Scenario后,本章节继续深入讲解在代码中,Scenario的执行过程.Scenario的Process()函数根据配置文件顺序执行stage,并判 ...

  5. DophinScheduler server部分 核心代码详细解析——掌控任务和进程的呼吸与脉搏:log、monitor与registry

    2021SC@SDUSC 文章目录 一.整体结构 二.具体分析 1.log 1.LoggerRequestProcessor 2.LoggerServer 3.MasterLogFilter 2.mo ...

  6. DophinScheduler ui部分 核心代码详细解析续集——前端组件的代码综合分析

    2021SC@SDUSC 文章目录 一.总体思路 二.js代码分析 1.pages 2.router 3.store 4.login 三.module 四.view 上文链接: DophinSched ...

  7. DophinScheduler server部分 核心代码详细解析——统领全局调度全场的服务器server部分究竟干了什么?

    2021SC@SDUSC 文章目录 一.整体结构 二.细节分析 1.builder 2.entity 1.DataxTaskExecutionContext 2.DependenceTaskExecu ...

  8. DophinScheduler ui部分 核心代码详细解析——底层逻辑与具体实现

    2021SC@SDUSC 文章目录 一.前端 1.\_test\_ 1.Counter.js 2.test.spec.js 2.build 3.node_modules 4.src 一.前端 1._t ...

  9. 心形图Python代码详细解析

    心形图Python代码详细解析 源代码 print('\n'.join([''.join([('pikachu'[(x-y)%7]\if((x*0.05)**2+(y*0.1)**2-1)**3-(x ...

  10. 【二】gym初次入门一学就会---代码详细解析简明教程----平衡杆案例

    相关文章: [一]gym环境安装以及安装遇到的错误解决 [二]gym初次入门一学就会-简明教程 [三]gym简单画图 [四]gym搭建自己的环境,全网最详细版本,3分钟你就学会了! [五]gym搭建自 ...

最新文章

  1. linux下彻底杀死ngnix进程方法
  2. 文本编辑BOM标记(Byte Order Mark)
  3. 微信jssdk ajax 获取签名,【Golang版】微信access_token、jsapi_ticket、signature签名算法生成示例,开箱即用...
  4. 可以将一个普通的Buffer转成只读的Buffer
  5. easyui treegrid idField 所在属性中值有花括号(如Guid)当有鼠标事件时会报错,行记录一下...
  6. 【MM模块】Blocking Reasons 冻结原因
  7. navicat卡死问题
  8. 理查森外推法 matlab,数值代数–理查森外推法.doc
  9. 果粉失望!iPhone 12系列依旧刘海屏,将升级Face ID元件
  10. build vue3 后压缩的文件在哪_Vue 3学习:4. 集成vuex
  11. 怎么确认mysql正确安装_怎么确认mysql是否安装好了
  12. 计算机ps基础知识教案范文,ps基础教案
  13. Vue源码分析系列:目录
  14. 苹果mac如何连接打印机
  15. ubuntu双系统 卸载+重装(ubuntu20.04)
  16. 有源与无源晶振的区别
  17. 激活windows系列地址
  18. android百度地图行政区填充颜色
  19. clannad手游汉化版_clannad游戏中文版
  20. 一个父亲需要挣多少钱,才能撑起一个家?

热门文章

  1. LeetCode 739. 每日温度
  2. linux命令cd 什么意思,Linux命令 cd ./.是什么意思
  3. golang知识图谱
  4. CTFshow web入门——php特性
  5. 性能优化的终极目标-内存简析
  6. 360浏览器是ie浏览器吗?有什么区别
  7. 【HNOI2013】切糕
  8. 魔兽争霸3技术分析资源汇总
  9. React Native --props使用之吹气球例子
  10. Android 没有出现menu 按键显示 解决