我这里有这个C程序代码,它确定了数组的最高连续值:
#include <stdio.h>
int inputs[8];
int calcSum(int i, int j);
int main(void) {
int i, j, maxSum = 0, tempSum = 0;
int length = sizeof(inputs)/sizeof(inputs[0]);
for(i=0;i<length;i++) {
scanf("%d", &inputs[i]);
}
for(i=0;i<length;i++) {
for(j=i;j<length;j++) {
tempSum = calcSum(i,j);
if(tempSum > maxSum) {
maxSum = tempSum;
}
}
}
printf("%d\n", maxSum);
return 0;
}
int calcSum(int i, int j) {
int c, sum;
for(c=i;c<=j;c++) {
sum+=inputs[c];
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
尽管这段代码看起来对我来说是正确的,但它会输出错误的结果.采样加入任何形式的printf("")(可以是空的也一样)之间tempSum = ...,并if(tempSum >...)将使代码输出所有测试用例正确的答案.我甚至从头开始重写了整个代码,但仍然遇到了同样的问题.例如,数字序列:5 2 -1 -2 -4 3 5 -6应输出8,一旦printf("")添加它就会执行,否则输出38 ......我不知道为什么.你能解释一下,我哪里出错了吗?
在这段代码中:
int calcSum(int i, int j) {
int c, sum;
for(c=i;c<=j;c++) {
sum+=inputs[c];
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
您需要确保初始化sum为起始值:
int calcSum(int i, int j) {
int c, sum;
sum=0;
for(c=i;c<=j;c++) {
sum+=inputs[c];
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)