Pat.Basic level.1005. 继续(3n+1)猜想

这道题目其实难度不是很大,就是只要记录你在运行过程中用到的数字,然后把这些数字放在一个数组的ID里,如果数字在就写为1.否则为初始值。
之后从你要寻找的数字里,在list中做一个遍历。看是否存在,如果不存在list中说明就是你要寻找哒。将它放入另外一个数组final中。
final最后要求排序,记得从大到小排。
PPPPPPS:最重要的一点,记录数字的那个数组一定要大一点,否则后面几个测试点会造成段错误。【数组溢出】

#include<stdio.h> 

int max(int a[], int len)
{
    int i;
    int maxid = 0;
    for ( i=1; i<len; i++)
    {
        if ( a[i] > a[maxid]){
            maxid = i;
        }
    }
    return maxid;
}

main(){
    int i,n,temp1;
    int test[105]={0},list[10000]={-1},define[105]={0},final[105]={0};
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&test[i]);
        define[i]=test[i];
    }

    for(i=1;i<=n;i++){
        while (test[i]!=1){
            if(test[i]%2!=0){
                list[(test[i]*3+1)/2]=1;
                test[i]=(test[i]*3+1)/2;
            }
            if(test[i]%2==0){
                test[i]=(test[i])/2;
                list[test[i]]=1;
            }
        }
    }

    temp1=1;
    for(i=1;i<=n;i++){
        if(list[define[i]]!=1){
            final[temp1]=define[i];
            temp1++;
        }
    }
    temp1=temp1-1;


    for ( i=temp1; i>0 ; i--)
    {
        int maxid = max(final,i+1);
        //swap a[maxid], a[len-1]
        int t = final[maxid];
        final[maxid] = final[i];
        final[i] =t;
    }
    for(i=temp1;i>1;i--){
        printf("%d ",final[i]); 
    }
     printf("%d",final[1]);   

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值