C 我的K-Dane算法实现有什么问题?
对于HackerRank挑战,我们也应该为负数实现K_Dane算法 下面是我的C实现,我试图找出如何调试它,但没有成功,有人能帮我找出代码中的错误吗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
#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;
}