天梯赛_L2-029 特立独行的幸福(stl)

团体程序设计天梯赛

L2-029 特立独行的幸福

使用一个数组tldx标记数字是否是特立独行的数,数组元素默认为true

维护一个依赖集合dependSet,用于存储某一迭代元素及依附于它的数。

函数iterates()用于迭代判断,所有迭代出的数都将依附于某一个数,所以tldx数组对应值标记为false,如果存在重复元素,则将iterates()根元素的tldx数组对应值标记为false,否则在tlNumDeg数组中存储该数字的独立性。

输出时判断是否是素数,是则独立性加倍。

#include <bits/stdc++.h>
using namespace std;
vector<bool> tldx(10010, true);
set<int> dependSet;
vector<int> tlNumDeg(10010);
int singleIterate(int a){
    int sum = 0, temp;
    while(a != 0){
        temp = a % 10;
        sum += pow(temp, 2);
        a = a / 10;
    }
    return sum;
}
bool iterates(int a){
    int t = 0;
    t = singleIterate(a);
    tldx[t] = false;
    if(t == 1) return true;
    if(dependSet.find(t) != dependSet.end()) return false;
    dependSet.insert(t);
    return iterates(t);
}
bool judgePrime(int a){
    bool flag = 1;
    for(int i = 2; i <= sqrt(a); i++)
        if(a % i == 0){
            flag = 0;
            break;
        }
    return flag;
}
int main(){
    int a, b;
    cin >> a >> b;
    for(int i = a; i <= b; i++){
        dependSet.clear();
        dependSet.insert(i);
        if(iterates(i) == false) tldx[i] = false;
        else tlNumDeg[i] = dependSet.size();
    }
    bool flag = false;
    for(int i = a; i <= b; i++){
        if(tldx[i] == true){
            flag = true;
            if(judgePrime(i) == true) cout << i << ' ' << 2 * tlNumDeg[i] << endl;
            else cout << i << ' ' << tlNumDeg[i] << endl;
        }
    }
    if(!flag) cout << "SAD" << endl;
    return 0;
}