C 我的K-Dane算法实现有什么问题?

C 我的K-Dane算法实现有什么问题?,c,algorithm,dynamic-programming,C,Algorithm,Dynamic Programming,对于HackerRank挑战,我们也应该为负数实现K_Dane算法 下面是我的C实现,我试图找出如何调试它,但没有成功,有人能帮我找出代码中的错误吗 #include <stdio.h> int main(void) { long long int t, n; scanf("%lld", &t); while(t--) { scanf("%lld", &n); long long int numbers

对于HackerRank挑战,我们也应该为负数实现K_Dane算法

下面是我的C实现,我试图找出如何调试它,但没有成功,有人能帮我找出代码中的错误吗

#include <stdio.h>

int main(void)
{
    long long int t, n;
    scanf("%lld", &t);
    while(t--)
    {
        scanf("%lld", &n);
        long long int numbers[n], i;
        for(i = 0;i < n;i++)
        {
            scanf("%lld", &numbers[i]);
        }
        long long int contigoussum = numbers[0],crtsum = numbers[0], sum = numbers[0];
        for(i = 1;i < n;i++)
        {
            if(numbers[i] + sum > sum)
            {
                sum += numbers[i];
            }

            crtsum += numbers[i];
            if(crtsum > contigoussum)
            {
                contigoussum = crtsum;
            }
            else
                crtsum = 0;
        }

        printf("%lld %lld\n", contigoussum, sum);
    }
    return 0;
}
输出

真正的答案:我想是10 11,因为[2-1234]的最大连续和可能是10 11

因此:

else
   crtsum = 0;
将其更改为:

else if(crtsum <0)
    crtsum = 0;

是您的工作代码的在线版本。

所有负数组的接受答案都失败

void calc(vector<int>& ar){
    int contigoussum = 0,crtsum = 0, sum = 0;
    int positive=0;
    int max=ar[0];

    for(int i = 0;i < ar.size();i++)
    {
        if(ar[i]>0)
            positive =1;
        else if (ar[i]>max)
            max=ar[i];
        if(ar[i] + sum > sum)
        {
            sum += ar[i];
        }

        crtsum += ar[i];
        if(crtsum > contigoussum)
        {
            contigoussum = crtsum;
        }
        else if(crtsum <0)
            crtsum = 0;
    }
    if(positive)
        cout<< contigoussum<<" "<<sum<<endl;
    else
        cout<< max<<" "<<max<<endl;             
}

哪方面错了?在问题中添加输入、预期输出和计算输出。你试过用调试器跟踪一个小例子吗?我真的不知道。。。黑客没有告诉我哪些测试用例是错误的,哪些是测试用例@MrSmith42那么您的代码通过了您用于测试的所有示例?@MrSmith42我添加了一个测试用例,但我的代码无法运行……太好了。这对那个测试用例有效,但我不确定为什么,但我的代码仍然有一个测试用例失败,我没有…@Nib我真的不知道,这不是我的比赛,可能是你的大数字和。。。除此之外,我刚刚查看了你的个人资料,发现你很少接受答案,无论是在这里还是在我身上。这真的不是一个好方法。如果我的问题没有得到回答,那么我不接受答案@AliAmiri@Nib这是你们的答案,但若你们想让像我这样的人为你们参加比赛,情况就不同了。但正如我的语言中有句谚语所说,国王知道什么对他们更有利:
else if(crtsum <0)
    crtsum = 0;
void calc(vector<int>& ar){
    int contigoussum = 0,crtsum = 0, sum = 0;
    int positive=0;
    int max=ar[0];

    for(int i = 0;i < ar.size();i++)
    {
        if(ar[i]>0)
            positive =1;
        else if (ar[i]>max)
            max=ar[i];
        if(ar[i] + sum > sum)
        {
            sum += ar[i];
        }

        crtsum += ar[i];
        if(crtsum > contigoussum)
        {
            contigoussum = crtsum;
        }
        else if(crtsum <0)
            crtsum = 0;
    }
    if(positive)
        cout<< contigoussum<<" "<<sum<<endl;
    else
        cout<< max<<" "<<max<<endl;             
}