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

Collatz猜想C++程序问题:输入4无输出、输入2正常的原因排查

问题分析与修复

嘿,我一眼就瞅到问题所在啦——你的代码漏掉了最关键的一步:更新变量k的值!

为什么输入2正常,输入4却无输出?

咱们拆解一下执行流程就懂了:

  • 输入2时:第一次进入循环,算出newnum = 2/2 =1,此时循环条件newnum !=1不成立,直接退出循环输出1,所以看起来没问题。
  • 输入4时:第一次循环算出newnum=4/2=2,循环条件newnum !=1满足,于是再次进入循环。但这时候k还是最初的4!下一次循环又会算出newnum=2,永远重复这个死循环,程序卡着不动,自然不会输出任何内容。

修复后的代码

只需要在循环里加一行代码,把新计算的值赋值给k,同时还能优化下逻辑:

#include <iostream>
using namespace std;
int main(){
    int k = 0;
    cout << "What is k?";
    cin >> k;
    do{
        int newnum; // 把newnum放在循环内,作用域更合理
        if(k % 2 == 0){
            newnum = k / 2;
        } else {
            newnum = 3 * k + 1;
        }
        k = newnum; // 关键:更新k为新值,让下一次循环处理新的数
    } while(k != 1);
    cout << "成功得到1!最终结果:" << k << endl;
    return 0;
}

核心修复点

  1. 必须更新k的值:每次算出newnum后,一定要把k替换成这个新值,否则循环永远在处理初始输入的数字。
  2. 简化判断逻辑:整数要么是偶数要么是奇数,不需要在else分支里再重复判断k%2==1。
  3. 优化变量作用域:把newnum放在循环内部定义,只在需要它的地方存在,代码更整洁。

现在再输入4试试,程序会依次执行4→2→1,然后输出成功信息啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:43:03