while 循环在满足条件时不会终止 (c++)

While loop does not terminate when condition is met (c++)

本文关键字:终止 c++ 循环 满足 条件 while      更新时间:2023-10-16

这对在线法官来说是一个问题。它需要两个输入,i和j,其中必须在两个输入之间找到最大的3n+1周期长度。

当 x 变为 1 时,程序应终止。但是当它为 1 时,代码不会终止,而是继续循环 1。提前感谢任何帮助。

#include <iostream>
using namespace std;
int main(){
    int i, j, temp_i, temp_j, counter, max;
    max = 0;
    cin >> i >> j;
    temp_i = i;
    temp_j = j;
    for(int x = i; x < j; x++){
        counter = 1;
        while(x != 1){
            if(x % 2 == 0){
                x = x/2;
                // cout << x << endl;
            }
            else{
                x = 3*x + 1;
            }
            counter++;
        }
        if(counter > max){
            max = counter;
        }
    }
    cout << temp_i << " " << temp_j << " " << max << endl;
    return 0;
}

您的循环存在逻辑错误。想一想:当x == 1和内部循环结束时,x增加到2,内部循环再次运行,直到x增加到2并且内部循环再次运行时x == 1......等等等等。

您需要使用第二个变量进行外部循环计数。类似的东西

for (int y = i; y < j; ++y)
{
    int x = y;
    while (x != 1)
    {
        ...
    }
}