📜  门|门 IT 2007 |第 31 题

📅  最后修改于: 2021-09-25 06:58:29             🧑  作者: Mango

考虑下面给出的 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