Bonheur Maverick (25 points)

Bonheur Maverick (25 points)

Faire une somme de carrés des chiffres d'un nombre décimal s'appelle une itération. Si un nombre décimal peut obtenir 1 à travers plusieurs itérations, il est appelé un nombre heureux. 1 est un nombre heureux. De plus, par exemple, 19 obtient 82 après 1 itération, 68 après 2 itérations, 100 après 3 itérations et 1 à la fin. Alors 19 est le nombre de bonheur. De toute évidence, les nombres passés lors de l'itération d'un nombre de bonheur à 1 sont tous des nombres de bonheur, et leur bonheur dépend du nombre initial. Par exemple, le bonheur de 82, 68 et 100 dépend de 19. Et un nombre de bonheur non conformiste ne dépend d'aucun autre nombre dans un intervalle limité; son indépendance est le nombre de nombres de bonheur qui lui sont attachés. Si ce nombre est encore un nombre premier, son indépendance est doublée. Par exemple, 19 est un nombre de bonheur non conformiste dans l'intervalle [1, 100], et son indépendance est 2 × 4 = 8.

Par contre, si un nombre supérieur à 1 entre dans une boucle sans fin après plusieurs itérations, alors le nombre n'est pas satisfait. Par exemple, 29 itérations donnent 85, 89, 145, 42, 20, 4, 16, 37, 58, 89, ... On peut voir que 89 à 58 forment une boucle sans fin, donc 29 n'est pas content.

Cette question vous oblige à écrire un programme pour lister tous les nombres de bonheur non-conformistes et leur indépendance dans un intervalle donné.

Format d'entrée:
saisissez les deux extrémités de l'intervalle fermé indiqué sur la première ligne: 1 <A <B≤10
4
.

Format de sortie:
Liste tous les nombres de bonheur non-conformistes et leur indépendance dans un intervalle fermé donné [A, B] dans l'ordre croissant. Chaque paire de nombres occupe une ligne et les nombres sont séparés par 1 espace.

S'il n'y a pas de nombre de bonheur dans l'intervalle, SAD est émis sur une ligne.

#include <bits/stdc++.h>
using namespace std;
int fa[10001];
int get(int x)//求各位平方和
{
    
    
    int sum=0;
    while(x)
    {
    
    
        sum+=(x%10)*(x%10);
        x=x/10;
    }
    return sum;
}
int sushu(int x)//素数
{
    
    
    for(int i=2;i<=sqrt(x);i++)
    {
    
    
         if(x%i==0)
         {
    
    
             return 0;
         }

    }
    return 1;
}
int findd(int x)//判断是否是特立独行,跟是否是1
{
    
    
    int ans=x;
    int i=0;
    while(fa[ans]!=ans)
    {
    
    
        ans=fa[ans];
        i++;
        if(i>=10000)
            return 0;
    }
    return ans;
}
int fun(int x,int n,int m)//是否有依赖
{
    
    
    for(int i=n;i<=m;i++)
    {
    
    
        if(fa[i]==x)
            return 0;
    }
    return 1;
}
int main()
{
    
    
   int n,m;
   cin>>n>>m;
   int cnt=0;
   for(int i=1;i<=10000;i++)
    fa[i]=get(i);
   for(int i=n;i<=m;i++)
   {
    
    
       if(fun(i,n,m)&&findd(i)==1)
       {
    
    
           cout<<i<<' ';
           int cnt1=1,x=i;
           while(get(x)!=1)
           {
    
    
               cnt1++;
               x=get(x);
           }
           if(sushu(i))
            cnt1*=2;
           cout<<cnt1<<endl;
           cnt++;
       }
   }
   if(cnt==0)
    cout<<"SAD"<<endl;
}

Je suppose que tu aimes

Origine blog.csdn.net/a675891/article/details/115270609
conseillé
Classement