不知道这个无限循环是从哪里来的
Not sure where this infinite loop is coming from
我从C进入C++,我可能缺少一些非常基本的东西。
我正在尝试用科拉茨猜想制作一个程序。 在循环的第一次迭代之前,i 和 j 都正确等于 1 和 10。 但是,尽管我的循环中有 i++,但 i 的值似乎从未改变。
我以为这将是一个快速编码的程序,但我对此感到困惑。任何帮助将不胜感激。
int n, j, i, count = 0;
cin >> n >> j;
for (i = n; i < j; i++){
while (i != 1){
if (i % 2 == 0)
i = i/2;
else
i = 3*i + 1;
}
count++;
cout << i << endl;
}
代码中的问题是,在运行测试猜想是否适用于i
的while
循环后,根据定义,i
被设置回1
(因为这是退出循环的条件),因此i++
每次都会从1
递增到2
。你永远过不了2
.
如果你试图测试从n
到j
的所有数字的科拉茨猜想,你需要在while
循环中使用一个不同于迭代的变量。
如果count
应该告诉你需要多少个周期,你需要在每个while
循环之前将其归零,并在while
循环内递增。
int n, j, i;
cin >> n >> j;
for (i = n; i < j; i++){
int test = i;
int count = 0;
while (test != 1){
if (test % 2 == 0) {
test = test/2;
} else {
test = 3*test + 1;
}
count++;
}
cout << i << ' ' << count << endl;
}
不确定它的全部内容,但这里有一些快速观察:
您的while(i != 1)
循环意味着它将无限期运行,或者当此循环结束时i
将等于1
。这意味着您的for (i = n; i < j; i++){
循环将始终以i=1
.难怪这是一个死循环。
在循环的第一次迭代之前,i 和 j 都正确等于 1 和 10。
让我们重播外循环的第二次迭代。
在此之前,在第一次迭代结束时,i
已递增到等于 2。现在
i % 2 == 0
=>i := i / 2
,即i := 1
.- 现在
i == 1
,内循环结束。 i
递增,现在等于 2。- 重复。
在这种情况下,您只需在每次循环迭代i = k
将循环变量复制到新变量,这样 for 循环变量就不会受到影响
#include <iostream>
int main(){
int min, max, count = 0;
std::cin >> min >> max;
for (int k = min; k <= max; ++k){
i = k;
while (i != 1)
{
if (i % 2 == 0)
i /= 2;
else
i = 3*i + 1;
count++;
std::cout << i << std::endl; //ONLY IF U WANT TO PRINT i EVERY ITERATION
}
std::cout << "Number of iterations needed: " << count << " for i = " << i << std:: endl;
}
相关文章:
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何在不知道C++中有多少可选参数的情况下在循环中使用va_arg?
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 循环通过网格获取温度,但不知道如何告诉程序停止循环
- 不知道为什么它不会停止循环
- 无限而循环不工作C++
- C++ 在不知道迭代何时结束时使用 for 循环
- 不知道这个无限循环是从哪里来的
- 我的c ++数组值不想改变,它输出无限循环
- 使用不带无限循环的 C++ i 检测文本文件中的更改
- 永远不会达到 EOF(无限循环)
- 不知道如何向我的程序添加循环...?
- 这段代码处于无限循环中,想知道如何解决它
- 无限循环,我不知道为什么
- 第一个函数中的无限循环不知道如何解决
- 代码无限循环不能只打印一次
- 无限循环不打印所有值
- C++ 使用 cin.fail(), cin.clear() ---我有一个无限循环,不知道为什么
- 代码无限循环,我不知道为什么C++
- 当 int = 时停止无限循环(不是整数的东西)