L2-029 特立独行的幸福 (25 分)

考试的时候没做出来,当时太心急了..
当然现在也还没做出来qaq,差最后一个测试点没过,目前还没发现问题所在(19-4-9)

题目链接:
https://pintia.cn/problem-sets/994805046380707840/problems/1111914599412858886

解题思路:
注释给的很清晰了,这里再画给图
(我个人偏爱的标记方式是-=999999和+=1)
![$9238HKM6]`0FNAK5VKGR2H.png](https://upload-images.jianshu.io/upload_images/16989852-4f44e6c81699ba5f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

没有ac的代码:

#include<stdio.h>
#include<math.h>                //独立性就是中转次数(素数*2)
#include<string.h>
int num[100005]={0},flag[100005]={0},TIMES[100005]={0},sad=0;
int aa,bb; 

int prime(int a)                //判断素数 
{
    for(int i=2;i<=sqrt(a);i++)
        if(a%i==0)
            return 1;           //返回1不是素数 
    return 0;                   //返回0是素数 
} 

void judge(int a)
{   
    memset(flag,0,10005);           //flag数组用于判断对a是否回头路 
    int times=0,A=a,tag=0;
    
    while(a!=1)
    {
        int sum=0;
        while(a)
        {
            sum=sum+pow((a%10),2);
            a/=10; 
        }   
        
        a=sum;
        times++;
        if(flag[a]==1||num[a]==-1)              //不走回头路,也不走前人摔下的路 
        {
            tag=1;
            num[A]=-1; 
            break;
        } 
        flag[a]=1;
    }
    
    if(tag==1)
        return;
        
    if(prime(A))            //不是素数
        TIMES[A]=times;     
    else                    //素数
        TIMES[A]=2*times;       

    for(int i=aa;i<=bb;i++)
    {
        if(i==A)
            continue;
        if(flag[i]==1)
            num[i]-=9999999;                //num[i]是负数表示是被用过的数字 
    }

    num[A]+=1;                          //负多正少是扭转不了什么的 
} 

int main()
{
    scanf("%d%d",&aa,&bb);
    
    for(int i=aa;i<=bb;i++)
        judge(i);                   
    
    for(int i=aa;i<=bb;i++)         
        if(num[i]>0)                    //不许依附于其它幸福数
        {
            printf("%d %d\n",i,TIMES[i]);
            sad=1;
        }
            
    if(sad==0)
        printf("SAD");
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容