这是the 3n+1 problem from UVA online judge的我的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;
}
每次提交都在时间限制之内,当我调试时,我得到正确的输出。
答案 0 :(得分:0)
!cin.eof()
不是确定何时退出循环的好方法。
尝试更改
while(!cin.eof()){
cin >> i >> j;
到
while(cin >> i >> j){
答案 1 :(得分:0)
您必须为每个新输入数字清除复杂性变量的值。您的代码也没有正确处理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;
}