zhuhangqq 2019-11-01 09:08 采纳率: 0%
浏览 505

PAT 乙级1005 继续(3n+1)猜想 C语言 利用递归函数 第四个测试点答案错误 求大佬解答

#include<stdio.h>
int function(int p,int q);
int main(void){
    int n;
    scanf("%d",&n);
    int a[n];
    for (int i = 0; i < n; i++)
    {
        scanf("%d",&a[i]);
    }
    int ret[100]={0};
    int cnt=0;
    for (int i = 0; i < n; i++)
    {   
        int flag=1;
        int order=0;
        //除a[i]以外的其他数都不覆盖a[i]
        while (order<n)
        {   
            if (order==i)
            {
                order++;
                continue;
            }
            if(function(a[order],a[i])){
                flag=0;
            }
            order++;
        }
        if (flag)
        {
            ret[cnt]=a[i];
            cnt++;
        }
    }
    //由大到小排序
    for (int i = 0; i < cnt-1; i++)
    {
        int t;
        for (int j = i+1; j < cnt ; j++)
        {
            if (ret[i]<ret[j])
            {
                t=ret[i];
                ret[i]=ret[j];
                ret[j]=t;
            }

        }

    }
    //输出
    for (int i = 0; i < cnt-1; i++)
    {
        printf("%d ",ret[i]);
    }
    printf("%d",ret[cnt-1]);
    return 0;
}
//递归函数用于检测q是否被p覆盖
int function(int p,int q){
    if (p==1)
    {
        return 0;
    }else if(p==q){
        return 1;
    }
    if(p%2)
    {
        p=3*p+1;
    }else
    {
        p/=2;
    }
    return function(p,q);
}
  • 写回答

2条回答 默认 最新

  • 大紫明宫空离境 2019-11-01 10:39
    关注

    int a[n]; 你确定这能通过编译?C貌似没有这样的声明吧

    评论

报告相同问题?

悬赏问题

  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面