qq_45388647 2023-04-28 08:40 采纳率: 50%
浏览 19

C++ pat b 1005 继续(3n+1)猜想测试点1 3 4都过不了 不知道哪里出的问题

1005 继续(3n+1)猜想测试点1 3 4都过不了,不知道哪里出的问题


#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int x[10000]={0};
bool cmp(int a, int b) {return a > b;}
void n3(int a){
    while(a!=1){
        if(a%2==1){
            a=(3*a+1)/2;
            x[a]=1;
        }
        else if(a%2==0){
            a=a/2;
            x[a]=1;
        }
    }
}
int main(){
    int n,a,flag=0;
    int k[100]={0};
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a;
        if(!x[a]&&i!=0){
            k[flag]=a;
            flag++;
            n3(a);
        }
        else if(!x[a]){
            n3(a);
        }
        else{
            continue;
        }
    }
    sort(k,k+flag,cmp);
    for(int i=0;i<flag-1;i++){
        printf("%d ",k[i]);
    }
    if(k[flag-1]!=0)
        cout<<k[flag-1];
}
  • 写回答

2条回答 默认 最新

  • Bony- 2023-04-28 12:25
    关注

    以下回答参考GPT并且由妙妙大帅整理:
    你的程序有可能出现数组越界的情况。数组 x 的大小为 10000,但在函数 n3 中,当 a 大于等于 10000 时,会访问 x 数组的越界元素,可能导致程序出错。可以将数组 x 的大小设为一个更大的值,比如 1000000,来解决这个问题。

    另外,当输入的第一个数是 1 时,你的程序可能会出现错误,因为你没有判断 a 是否为 1,如果 a 为 1,则会陷入死循环。你可以在函数 n3 的开头加上这样一句代码:

    if (a == 1) return;

    这样就可以避免陷入死循环了。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月28日

悬赏问题

  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 arbotix没有/cmd_vel话题