对于在线裁判来说,这是一个问题。它需要两个输入,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;
}
答案 0 :(得分:1)
您的循环有逻辑错误。考虑一下:当x == 1
和内部循环结束时,x
增加到2
,内部循环再次运行,直到x == 1
x
增加到2
并且内循环再次运行......依此类推。
您需要使用第二个变量进行外循环计数。像
这样的东西for (int y = i; y < j; ++y)
{
int x = y;
while (x != 1)
{
...
}
}