C++编写3x+1猜想程序时能否直接使用x/2、x*3+1这类表达式?
3x+1问题C++代码错误修正说明
这类算术运算在C++中完全可以实现,你的代码没有得到预期结果是两处语法逻辑错误导致的,和表达式本身的写法无关。
错误原因
- 循环条件逻辑写反:你当前的循环条件为
while(x==1),表示仅当x等于1时才执行循环逻辑。你输入的初始值是9,不满足循环触发条件,循环体完全不会执行,因此没有后续数值输出。正确的循环条件应该是while(x != 1),即只要x还没迭代到1就持续执行计算。 - 运算结果没有回存到变量:
x/2;、x*3+1;这类表达式仅会计算对应算术结果,不会主动把结果赋值回原变量x,因此x的值从头到尾都不会发生变化。你需要手动赋值,两种写法均可:- 标准赋值写法:
x = x / 2;、x = x * 3 + 1; - 复合赋值简化写法:
x /= 2;、乘法部分可拆分为x *=3; x +=1;
- 标准赋值写法:
修正后完整代码
#include <iostream> using namespace std; int main() { cout << "Write an integer.\n"; int x; cin >> x; // 实现3x+1数学问题的程序 while (x != 1) { if ((x%2)==0) { x /= 2; cout << x << ", "; } else if ((x%2)==1) { x = x * 3 + 1; cout << x << ", "; } } return 0; }
输入9后程序会依次输出28, 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, ,符合预期。
内容的提问来源于stack exchange,提问作者prismriver199
相关产品推荐
相关产品推荐

