题目链接
解题思路:
模拟题
而一个特立独行的幸福数,是在一个有限的区间内不依附于任何其它数字的;
一开始没注意这一行 样例一直没出来 后来又重新标记 发现还是出不来
然后我发现我是边判断边输出的 这样 前面的数也可能不是独立的 应该判断完 后 统一再判断输出
代码如下:
#include<iostream>
#include<cmath>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=1e4+10;
int vis[maxn];
map<int,int> mp;
int prime(int x)
{
if(x<2)
return 1;
else
{
for(int i=2;i<=sqrt(x);i++)
{
if(x%i==0)
return 1;
}
return 2;
}
}
int main()
{
int l,r,i,j,k,x,y;
int flag=0;
int n,ans;
cin>>l>>r;
for(i=l;i<=r;i++)
{
n=i;
ans=0;
vector<int> v;
while(n!=1)
{
ans=0;
while(n)
{
ans+=(n%10)*(n%10);
n/=10;
}
n=ans;
if(find(v.begin(),v.end(),ans)!=v.end()) //判断是否陷入死循环
break;
v.push_back(n);
vis[n]++;//标记一下,不是特立独行的
}
if(n==1)
mp[i]=v.size();
}
for(map<int,int>::iterator it=mp.begin();it!=mp.end();it++)
{
if(!vis[it->first])
{
cout<<it->first<<" ";
cout<<it->second*prime(it->first)<<endl;
flag=1;
}
}
if(!flag)
cout<<"SAD"<<endl;
return 0;
}