该程序的设计思路如下:

  1. 首先定义了两个 mapflag 用于标记已经被访问过的数字,appear 用于标记在一次迭代过程中出现过的数字。

  2. 程序主函数中输入了区间的起始和结束数字 AB

  3. 对于区间内的每个数字 z,如果该数字已经被标记过,则跳过;否则,清空 appear,并调用 deepLove 函数计算该数字的独立性。

  4. deepLove 函数中,首先判断当前数字是否为 1,如果是则返回当前的迭代深度 deep;如果当前数字在一次迭代过程中已经出现过,则返回 0。否则,计算下一个数字 next,将 next 标记为已访问,并递归调用 deepLove 函数。

  5. 如果在递归调用过程中,某个数字 next 变为 1,则返回当前的迭代深度。

  6. 在主函数中,遍历区间内的所有数字 z,如果该数字的独立性大于 0 且未被标记过,则输出该数字和其独立性。如果没有符合条件的数字,则输出'SAD'。

  7. 最后定义了一个辅助函数 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录