这是我来自UVA在线判断的3n + 1问题的C++代码,在这里运行良好,但每次提交都被认为是错误的解决方案。我相信这与输入或输出格式有关。我只是不知道问题到底是什么。谁能帮我调查这个问题?
#include <iostream>
using namespace std;
int main(){
int i, j, ori, orj, complexity = 0;
while(!cin.eof()){
cin >> i >> j;
ori = i;
orj = j;
if (i > j){
int temp = i;
i = j;
j = temp;
}
for (int k = i; k <= j; k++){
int c = 1;
int n = k;
do{
c++;
if (n % 2 == 0)
n /= 2;
else
n = 3 * n + 1;
} while (n != 1);
if (c > complexity)
complexity = c;
}
cout << ori << " " << orj << " " << complexity << endl;
}
return 0;
}
每次提交都在时间限制内,当我调试时,我得到了正确的输出。
!cin.eof()
不是确定何时退出循环的好方法。
尝试更改
while(!cin.eof()){
cin >> i >> j;
自
while(cin >> i >> j){
您必须为每个新输入数字清除复杂度变量的值。您的代码也无法正确处理 i 和 j 等于 1 的值。在这种情况下,您必须添加特殊条件,并且不要运行循环。所以这是整个代码的变化:
int main() {
int i, j, ori, orj, complexity;
while (!cin.eof()) {
complexity = 0;
cin >> i >> j;
ori = i;
orj = j;
if (i > j) {
int temp = i;
i = j;
j = temp;
}
if (j > 1) {
for (int k = i; k <= j; k++) {
int c = 1;
int n = k;
do {
c++;
if (n % 2 == 0)
n /= 2;
else
n = 3 * n + 1;
} while (n != 1);
if (c > complexity)
complexity = c;
}
} else {
complexity = 1;
}
cout << ori << " " << orj << " " << complexity << endl;
}
return 0;
}