考虑下面给出的 C 程序:
#include
int main () {
int sum = 0, maxsum = 0, i, n = 6;
int a [] = {2, -2, -1, 3, 4, 2};
for (i = 0; i < n; i++) {
if (i == 0 || a [i] < 0 || a [i] < a [i - 1]) {
if (sum > maxsum) maxsum = sum;
sum = (a [i] > 0) ? a [i] : 0;
}
else sum += a [i];
}
if (sum > maxsum) maxsum = sum ;
printf ("%d\n", maxsum);
}
这个程序执行时打印出来的值是多少?
(一) 9
(乙) 8
(三) 7
(四) 6答案: (C)
说明:如果仔细查找 for 循环,您会注意到它在 if 条件中将 sum 变量分配给某个值,并在 else 条件中将其递增。进一步思考,很明显这个循环在 sum 变量中存储了正整数的递增子序列的总和,在 maxsum 中存储了 sum 的最大值。因此,maxsum – 正整数递增子序列的最大和会在执行此程序时打印出来,即 3 + 4 = 7。
此解决方案由Vineet Purswani 提供
//输出将是 3+4 =7 {for ||如果第一个参数为真,则不计算第二个参数,如果第一个参数为假,将计算第二个参数}
另一种解决方案
当 i=1
-> i==0 为假,但 a[i] maxsum) 为真,因为 sum=2 且 maxsum=0。所以 maxsum=2。总和 = (a [i] > 0) ? [i] : 0; , sum=0 因为 a[i]<0。
当 i=2
-> i==0 为假,a[i] maxsum) 为假,因为 sum=0 且 maxsum=2.Since sum = (a [i] > 0) ? [i] : 0; , sum=0 因为 a[i]<0。
当 i=3
-> i==0 为假, a[i]<0 为假且 a [i] < a [i – 1] 为假,因此条件 (1) 为假。现在 sum += a [i] = 3。
当 i=4
-> i==0 为假, a[i]<0 为假且 a [i] < a [i – 1] 为假,因此条件 (1) 为假。现在 sum += a [i] = 7。
当 i=5