Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 动态编程上的SIGSEGV错误-CodeChef_C++_Dynamic Programming_Segmentation Fault - Fatal编程技术网

C++ 动态编程上的SIGSEGV错误-CodeChef

C++ 动态编程上的SIGSEGV错误-CodeChef,c++,dynamic-programming,segmentation-fault,C++,Dynamic Programming,Segmentation Fault,希望你们都有一个美好的一天 我喜欢编程,但在过去的几天里,我彻夜未眠,CodeChef总是在我的动态编程解决方案中返回SIGSEGV错误 我现在正在解决这个问题。问题是- 在Byteland,他们有一个非常奇怪的货币体系。每个比特兰阶 金币上写着一个整数。一枚硬币可以是n 在银行兑换成三枚硬币:n/2、n/3和n/4。但是这些 数字都是四舍五入的(银行必须盈利)。你 也可以以美元出售比特兰迪亚硬币。交易所 比率是1:1。但你买不到比特兰迪亚硬币。你有一枚金牌 硬币你最多能拿到多少美元 是吗 输入

希望你们都有一个美好的一天

我喜欢编程,但在过去的几天里,我彻夜未眠,CodeChef总是在我的动态编程解决方案中返回SIGSEGV错误

我现在正在解决这个问题。问题是-

在Byteland,他们有一个非常奇怪的货币体系。每个比特兰阶 金币上写着一个整数。一枚硬币可以是n 在银行兑换成三枚硬币:n/2、n/3和n/4。但是这些 数字都是四舍五入的(银行必须盈利)。你 也可以以美元出售比特兰迪亚硬币。交易所 比率是1:1。但你买不到比特兰迪亚硬币。你有一枚金牌 硬币你最多能拿到多少美元 是吗

输入

输入将包含多个测试用例(不超过10个)。每个 testcase是一个带有数字n,0的单行 问题在于转角情况n=0


calc(0)无限期递归,因为0 SEGV发生在哪一行?@Barmar其他在线编译器接受该解决方案,但CodeChef编译器(即问题发布的网站)不接受该解决方案给出的SEGV没有行号。可能是递归中的堆栈溢出。是否只有当
c
较大时才会发生这种情况?@Barmer非常感谢您的回复。也许是这样。但我已经检查了“c”的最大值(如问题中所给出的),但它在其他编译器中也起作用。我解决问题的方法正确吗?哦,该死!相信我-我曾经想过0-我曾经-但后来我有点分心了!我怎么会错过呢?无论如何,这是一个巨大的解脱,当然也是一个很好的教训。谢谢,伙计!击掌!
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

long long n[100001];

long long calc(long long x) {
    if (x < 10001) {
        if(n[x] != 0) return n[x];
        n[x] = max(x, calc(x/2) + calc(x/3) + calc(x/4));
        return n[x];
    }
    else return max(x, calc(x/2) + calc(x/3) + calc(x/4));
}

int main() {
    memset(n, 0, sizeof(n));
    n[1] = 1;
    n[2] = 2;
    n[3] = 3;
    n[4] = 4;
    n[5] = 5;
    n[6] = 6;
    for (int i = 7; i < 10001; i++)
        n[i] = calc(i);
    int t = 10;
    while (t--) {
        long long c;
        scanf("%lld", &c);
        printf("%lld\n", calc(c));
    }
    return 0;
}