2.3k views

Consider the C program given below :

#include <stdio.h>
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);

}


What is the value printed out when this program is executed?

1. $9$
2. $8$
3. $7$
4. $6$
edited | 2.3k views

$$\begin{array}{|l|l|l|l|l|} \hline \text{i} & \text{A[i]} & \text{for \rightarrow if -----satisfied?} & \text{maxsum} & \text{sum} \\\hline \text{-} & \text{-} & \text{-} & 0 & 0 \\\hline 0 & \text{A= 2} & \text{Yes (i == 0)} & 0 & 2 \\\hline 1 & \text{A= -2} & \text{Yes (a[i] < 0)} & 2 & 0 \\\hline 2 & \text{A= -1} & \text{Yes (a[i] < 0)} & \text{(for \rightarrow if \rightarrow if -----not satisfied)} & 0 \\\hline 3 & \text{A= 3} & \text{No (else executed)} & \text{(for \rightarrow if \rightarrow if -----not satisfied)} & 3 \\\hline 4 & \text{A= 4} & \text{No (else executed)} & \text{(for \rightarrow if \rightarrow if -----not satisfied)} & 7 \\\hline 5 & \text{A= 2} & \text{Yes (a[i] < a[i - 1])} & 7 & 2 \\\hline \end{array}$$

[End of for loop]

If (sum (i.e., $2$) $>$ maxsum (i.e., $7$))   // No

maxsum $=$ sum;   // Not Executed

printf will output maxsum $= 7$

edited
0
ans is c
0
Thanks, I have written it now.
+1
Great !
The algorithm is finding the maximum sum of the monotonically increasing continuous sequence of positive numbers in the array. So, output would be $3+4 = 7.$
+1
Sir but here in array  the no. is 2,-2,-1,3,4,2. How is it monotonically increasing? I couldn't understand? Please explain a bit about it. Thanks.
+2
How did you know that it is monotonically increasing by looking into question.Is there any standard approach to do such kinds of problems ?
+1
monotonically incresing means to find of set of contigous vaues which has maximum sum

in ques ,

{-2,-1,3,4}  SUM=4

{-1,3,4} SUM=6

{3,4} SUM=7

here maximum sum is 7

HEnce monotonically incresing value is 7
0
@Arjun Sir,  if the input array contains only negative integers in increasing order (example--9, -8,-7,-3,-2,-1) then output will be 0, is the algorithm  correct in that case?
+1
yes, if there are no positive values sum must be 0.
first of  all  some  synatax  error  in  above  code segment .  right code given  below

# include <stdio.h>
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);
}

ans  is  C .

simply  execute  and  trace  value of  sum and  maxsum for i=0 to 5

i  -->      initially  0   1   2   3   4     5

sum            0     0   2   0   3    7    2

maxsum     0     0   2   2   2   2    7

so  maxsum  =  7
0
Your answer is correct, but the traced values of sum at i = 0 and i = 1 have been written wrong here. These should be opposite (you may have miss typed).
0
general doubt:

when we are inside the function ,the value of sum is retain back just like static.but once if we out from the for loop the value of sum and mxsum wil be zero? 