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

时间:2011-08-29 14:39:48

标签: c

我最近开始阅读S. Skiena撰写的“编程挑战”一书,不管你是否相信我都陷入了第一个问题。

以下是问题的链接:3n+1 problem

这是我的代码:

 #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]);
    }
}

我的代码出了什么问题?输入和输出与sample完全相同。但提交结果总是运行时错误!

2 个答案:

答案 0 :(得分:1)

你的代码似乎在输入文件中假定最多100行 - 他们正在测试的样本数据可能更大?他们没有明确声明输入数据的最大设置大小。

答案 1 :(得分:0)

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

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