collat​​z c代码逻辑错误

标签 c collatz

static void collatz(int i)
{
    int x=0,a=0,res=0,count=0;
    int array[50];
    array[0]=i;
    while(array[count]!=0)
    {
        if(array[count]%2==0)
        {
            count++;
            array[count]=i/2;
        }
        else
        {
            count++;
            array[count]=3*array[count-1]-1;
        }
    }
}
int main()
{
    int a;
    scanf("%d",&a);
    collatz(a);
    system("pause");
    return 0;
}

当我编译并运行代码时,我输入 8 作为“a”,然后控制台崩溃了。我正在使用 dev c。 抱歉我的英语很糟糕,但我希望我已经足够清楚了。

最佳答案

我数了四个错误:

  • array[count]1 而不是 0 时,循环应该终止
  • 您应该检查 count 是否小于 49
  • array[count]=i/2 应该是 array[count]=array[count-1]/2
  • array[count]=3*array[count-1]-1 应该是 array[count]=3*array[count-1]+1

因此修复了这些问题并略微缩短的代码可能是:

static void collatz(int i) {
    int count=0;
    int array[50];
    array[0]=i;
    while (count < 49) {
        int j = array[count++];
        if (j == 1)
           break;
        else if(j % 2 == 0)
            array[count]=j/2;
        else
            array[count]=3*j+1;
    }
}

关于collat​​z c代码逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22648948/

相关文章:

C - TCP 校验和(使用原始套接字)——如何获取 IP 地址

c - SOS 我疯了,但还没找到 137 线不起作用的原因

c - 使用 scanf 传递未知数量的整数

c - 在运行一些计算时写入 txt 文件

python - 使用 python 打印正整数 n 的 collat​​z 序列,每行一个值在 1 处停止

c - 混合数据类型(int、float、char 等)如何存储在数组中?

c - 在函数 strToInt 中正确使用三元运算符 (C)

java - Project Euler #14 输出的输出不正确

c++ - 尝试解决 Collat​​z p‌r‌o‌b‌l‌e‌m 时得到奇怪的结果

c - 为什么 < 比 != 快得多?