C++程序实现特立独行的幸福数计算
该程序的设计思路如下:
-
首先定义了两个
map,flag用于标记已经被访问过的数字,appear用于标记在一次迭代过程中出现过的数字。 -
程序主函数中输入了区间的起始和结束数字
A和B。 -
对于区间内的每个数字
z,如果该数字已经被标记过,则跳过;否则,清空appear,并调用deepLove函数计算该数字的独立性。 -
deepLove函数中,首先判断当前数字是否为1,如果是则返回当前的迭代深度deep;如果当前数字在一次迭代过程中已经出现过,则返回0。否则,计算下一个数字next,将next标记为已访问,并递归调用deepLove函数。 -
如果在递归调用过程中,某个数字
next变为1,则返回当前的迭代深度。 -
在主函数中,遍历区间内的所有数字
z,如果该数字的独立性大于0且未被标记过,则输出该数字和其独立性。如果没有符合条件的数字,则输出'SAD'。 -
最后定义了一个辅助函数
SU用于判断一个数字是否为素数,如果是则返回true,否则返回false。
程序中没有涉及文件操作或数据库操作,只是使用了简单的数据结构 map 来记录已经访问过的数字和出现过的数字。
#include<bits/stdc++.h>
using namespace std;
map<int,bool> flag,appear;
int deepLove(int num,int deep);
bool SU(int num);
int results[10001] = {0};
int main()
{
int A,B;
cin >> A >> B;
for(int z=A;z<=B;z++){
if(flag[z]) continue;
appear.clear();
results[z] = deepLove(z,0);
}
bool output = false;
for(int z=A;z<=B;z++){
if(results[z]>0 && !flag[z])
{
output = true;
if(SU(z)) results[z] = results[z] << 1;
cout << z << ' ' << results[z] << endl;
}
}
if(!output) cout << "SAD" << endl;
return 0;
}
int deepLove(int num,int deep)
{
if(num==1) return deep;
if(appear[num]) return 0;
int next = 0;
appear[num] = true;
while (num>0) next+=pow((num%10),2),num/=10;
flag[next] = true;
return deepLove(next,deep+1);
}
bool SU(int num)
{
if(num<4) return true;
if(num%2==0) return false;
for(int z=3;z< sqrt(num)+1;z+=2) if(num%z==0) return false;
return true;
}
原文地址: https://www.cveoy.top/t/topic/qxZl 著作权归作者所有。请勿转载和采集!