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

时间:2015-06-17 04:38:40

标签: c++

对于在线裁判来说,这是一个问题。它需要两个输入,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;
}

1 个答案:

答案 0 :(得分:1)

您的循环有逻辑错误。考虑一下:当x == 1和内部循环结束时,x增加到2,内部循环再次运行,直到x == 1 x增加到2并且内循环再次运行......依此类推。

您需要使用第二个变量进行外循环计数。像

这样的东西
for (int y = i; y < j; ++y)
{
    int x = y;
    while (x != 1)
    {
        ...
    }
}
相关问题