c - 我的 for 循环似乎没有增加。它卡在 2 上(项目 euler 14)
问题描述
我正在研究 euler #14 项目:
问题:
为正整数集定义了以下迭代序列:
n → n/2(n 为偶数) n → 3n + 1(n 为奇数)
使用上面的规则并从 13 开始,我们生成以下序列:
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 可以看出,这个序列(从 13 开始,到 1 结束)包含 10 个项。尽管尚未证明(科拉茨问题),但人们认为所有起始数字都以 1 结束。
哪个起始数字(低于 100 万)产生最长的链?
注意:一旦链启动,条款允许超过一百万。
问题:
当我运行此代码时,第一个 for 循环按预期运行。但是随后变量num
似乎没有在 for 循环中增加并保持在 2 (甚至不在我开始时给出的 num 的参数中),给出输出:
2
0
1
1
一遍又一遍地重复。不知道为什么会发生这种情况,并且在网上找不到任何东西。
代码:
#include <stdio.h>
int main() {
int maxcount = 0;
for (int num = 5; num < 2000000; num++) {
printf("%d\n0\n\n", num);
int count = 0;
while (num >= 1) {
count++;
if (num == 2) {
num = 1;
printf("1\n%d\n\n", count);
}
if (num > 1) {
if (num % 2 == 0) {
num = num / 2;
printf("%d\n%d\n\n", num, count);
}
else {
num = (3 * num) + 1;
printf("%d\n%d\n\n", num, count);
}
}
if (num == 1) {
break;
}
}
if (count > maxcount) {
maxcount = count;
}
}
printf("%d", maxcount);
return 0;
}
解决方案
在 while 循环中,您更改循环变量 ( num
) 的值。
您从 开始num = 5
,然后内部 while 循环遵循 Collatz 的规则并到达 1,此时 while 循环结束。
然后 for 循环结束,并num
递增到 2 num++
,循环的下一次迭代开始。
在第二次迭代中,while 循环立即看到num == 2
,因此它设置num = 1
,并且 while 循环结束。然后 for 循环结束,递增num
到 2,循环永远继续。
正如其他人所说,您只需要单独保留循环变量并在内部循环中使用不同的变量。
推荐阅读
- java - 没有注册的仪器,运行单元测试时出错
- python - 在 Python 中运行 IF 语句时出现“关键错误:-1”
- if-statement - 使用 if、then 和 endif 重新定义 IDL 时出现意外的语法错误
- java - 如何修复 javafx 中的 fx id 错误?
- python - 当使用隔离级别 `SERIALIZABLE` 时,为什么在同一个 `Engine` 上创建的两个 `Session` 可以看到彼此未提交的更改?
- html - 我正在尝试使用 django 框架在 html 中添加图像,图像没有出现
- javascript - 如何将持续时间除以数字?(JavaScript,谷歌表)
- react-native - 如何渲染当前订单的地图?
- ruby-on-rails - Rails :less_than 验证使 RSpec 测试失败
- python - 无法使用变压器包加载 SpanBert 模型