我这里有这个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;
}
即使这段代码对我来说是正确的,它也会输出错误的结果。在printf("")
和tempSum = ...
之间添加任何类型if(tempSum >...)
(也可以为空)的采样将使代码输出所有测试用例的正确答案。我甚至从头开始重写了整个代码,但仍然遇到了同样的问题。
例如,数字序列:5 2 -1 -2 -4 3 5 -6应该输出8,一旦printf("")
被添加就会输出,否则输出38 ...我不知道为什么。你能解释一下,我哪里出错了吗?
答案 0 :(得分:7)
在此代码中:
int calcSum(int i, int j) {
int c, sum;
for(c=i;c<=j;c++) {
sum+=inputs[c];
}
return sum;
}
您需要确保将sum
初始化为起始值:
int calcSum(int i, int j) {
int c, sum;
sum=0;
for(c=i;c<=j;c++) {
sum+=inputs[c];
}
return sum;
}