You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现获取Collatz序列中的最大值?现有代码待修正

如何修改collatzMax函数获取Collatz序列的最大值?

我已经实现了输出Collatz序列的writeCollatzSekvens函数,代码如下:

void writeCollatzSekvens(long int n){
    cout << n << " ";
    while(n !=1){
        if ( n % 2 == 0){
            n = n/2;
            cout <<  n << " ";
        }
        else{
            n = (n*3) + 1;
            cout << n << " ";
        }
    }
}

调用writeCollatzSekvens(7)会输出:7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1。现在需要编写collatzMax函数返回该序列中的最大值(比如示例中的52),当前的collatzMax代码如下:

long int collatzMax(long int n){
    int max = 0;
    if (n > max){
      max = n;
    }
  return max;
}

修改方案

当前的collatzMax函数仅检查了初始输入值,未遍历完整的Collatz序列,因此无法获取序列中的最大值。需要复刻writeCollatzSekvens的遍历逻辑,逐个生成序列元素并同步记录最大值。

修改后的完整代码:

long int collatzMax(long int n){
    // 初始最大值设为序列首个元素n
    long int max = n;
    // 遍历序列直到n变为1
    while(n != 1){
        if (n % 2 == 0){
            n = n / 2;
        } else {
            n = (n * 3) + 1;
        }
        // 每次生成新元素后,更新最大值
        if (n > max){
            max = n;
        }
    }
    return max;
}

关键修改说明

  • 调整max的类型为long int:避免序列中出现超出int范围的数值时发生溢出。
  • 初始化max为输入参数n:序列的第一个元素本身可能就是最大值,不能遗漏。
  • 添加循环遍历逻辑:和writeCollatzSekvens保持一致,完整生成序列的每一个元素。
  • 实时更新最大值:每生成一个新元素就对比当前最大值,确保捕获序列中的峰值。

调用collatzMax(7)会返回52,符合预期需求。


内容的提问来源于stack exchange,提问作者Snozye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 23:50:23