这是我编写的使用Kadane算法查找最大和子数组的代码。
代码:
#include <stdio.h>
int maxSum(int a[],int size)
{
int ans=0; //stores the final sum
int sum=0; //stores the sum of the elements in the empty array
int i;
for(i=0;i<size;i++)
{
sum=sum+a[i];
if(sum<0)
{
sum=0;
}
if(ans<sum)
{
ans=sum;
}
}
return ans;
}
void main(){
int j,size,t,total; //size=size of the array,t=number of test cases
scanf("%d\n",&t);
while(t-->0)
{
int a[size];
for(j=0;j<size;j++)
{
scanf("%d ",&a[j]);
}
total=maxSum(a,size);
printf("\n%d",total);
}
}
我一直得到错误的输出:
对于输入:
2 //test cases
3 //case 1
1 2 3
4 //case 2
-1 -2 -3 -4
您的输出是:
0 //it should be 6
0 //it should be -1
答案 0 :(得分:3)
唯一的错误是您没有使用size
初始化数组a
的大小之前对其进行了初始化-否则程序就可以了。
主要-> 似乎您是在 Turbo 上对其进行编码(因为您使用的是void main()
而不是int main(void)
)过时的编译器-转到 GCC 或 CLANG 。