C 为什么我的3n+;1问题解决方案错误

C 为什么我的3n+;1问题解决方案错误,c,C,我最近开始阅读S.Skiena的《编程挑战》一书,信不信由你,我有点陷入了第一个问题 以下是问题的链接: 这是我的密码: #include <stdio.h> long get_cycle(long input){ if (input == 1){ return 1; } else{ if (input & 1){ return 2 + get_cycle((3*input+1)>>

我最近开始阅读S.Skiena的《编程挑战》一书,信不信由你,我有点陷入了第一个问题

以下是问题的链接:

这是我的密码:

 #include <stdio.h>

long get_cycle(long input){
    if (input == 1){
        return 1;
    }
    else{
        if (input & 1){
            return 2 + get_cycle((3*input+1)>>1);
        }
        else{
            return 1 + get_cycle(input >> 1);
        }
    }
}

long get_range_cycle(int k, int j){
    int i;
    int max = 0;
    int current_cycle;
    int to = k > j ? k : j;
    int from = k < j ? k : j;
    for (i=from; i<=to; ++i){
        current_cycle = get_cycle(i);
        if (current_cycle > max){
            max = current_cycle;
        }
    }
    return max;
}

int main(){
    long p, q;
    long re[100][3];
    int i = 0;
    while (scanf("%ld %ld",&p,&q) == 2){
        re[i][0] = p;
        re[i][1] = q;
        re[i][2] = get_range_cycle(p,q);
        ++i;
    }
    int j;
    for (j=0; j<i; ++j){
        printf("%ld %ld %ld\n",re[j][0],re[j][1],re[j][2]);
    }
}
#包括
长获取周期(长输入){
如果(输入=1){
返回1;
}
否则{
如果(输入和1){
返回2+get_循环((3*输入+1)>>1);
}
否则{
返回1+get_循环(输入>>1);
}
}
}
长量程循环(int k,int j){
int i;
int max=0;
int电流_周期;
int to=k>j?k:j;
int from=k对于(j=0;j您的代码似乎假设输入文件中最多有100行-他们正在测试的样本数据可能更大?他们没有明确声明输入数据的最大集大小。

我相信您寻求答案的问题在于答案@Elemental。但是,如果您解决了这个问题,您的解决方案将超时


您应该做的是建立一个0到1000000之间所有答案的列表。这可以在线性时间内完成(我不会给您完整的答案)。

“我的代码有什么问题?”这不是一个很好的堆栈溢出问题。它不会解决你的问题,但是你的main应该
返回
一些东西。你真的应该在uva judge Forum中询问。如果你问自己如果有101行输入,会发生什么,你就会知道错在哪里了。与其问你想支持多少行输入,也许更多的是u有必要考虑是否需要同时存储所有输入/结果。