fork(4) download
  1. #include<stdio.h>
  2.  
  3. int maxSubarrayProduct(int a[], int start, int size)
  4. {
  5. int i;
  6. int neg_index;
  7. int count=0;
  8. int max_prod_ending_here=1;
  9. int max_prod_so_far=0;
  10. int temp;
  11. for(i=start;i<size;i++)
  12. {
  13. max_prod_ending_here= max_prod_ending_here * a[i];
  14. if(max_prod_ending_here > max_prod_so_far)
  15. max_prod_so_far=max_prod_ending_here;
  16. if(max_prod_ending_here<0 && count==0)
  17. {
  18. count++;
  19. neg_index=i;
  20. }
  21. if(max_prod_ending_here <0 && count > 0)
  22. {
  23. temp=(max_prod_ending_here)/(a[neg_index]);
  24. if(temp > max_prod_so_far)
  25. max_prod_so_far=temp;
  26. }
  27. }
  28. return max_prod_so_far;
  29. }
  30.  
  31. int max( int a, int b)
  32. {
  33. if(a>b)
  34. return a;
  35. else
  36. return b;
  37. }
  38.  
  39. int main()
  40. {
  41. int arr[] = {6, -3, 0, -10, 3, -60, -40, 2};
  42. int bef_zero=0;
  43. int aft_zero=0;
  44. int bef_num_neg=0;
  45. int aft_num_neg=0;
  46. int i;
  47. int count=0;
  48. int max_prod=1;
  49. int max_prod_a=1;
  50. int max_prod_b=1;
  51. int index_zero;
  52.  
  53. int n = sizeof(arr)/sizeof(arr[0]);
  54. for(i=0;i<n;i++)
  55. {
  56. bef_zero++;
  57. if(arr[i]<0)
  58. bef_num_neg++;
  59.  
  60. if(arr[i]==0)
  61. {
  62. index_zero=i;
  63. break;
  64. }
  65. count++;
  66. }
  67. aft_zero=n-bef_zero-1;
  68. for(i=index_zero+1;i<n;i++)
  69. {
  70. if(arr[i]<0)
  71. aft_num_neg++;
  72. }
  73. if(count==n && ((bef_num_neg+aft_num_neg)%2 == 0)) // CASE 1: No zero and even num of negatives
  74. {
  75. for(i=0;i<n;i++)
  76. max_prod=max_prod * arr[i];
  77. printf("Max Sub array Product is %d", max_prod);
  78. }
  79. if(count==n && ((bef_num_neg+aft_num_neg)%2 == 1)) // CASE 2: No zero and odd num of negatives
  80. printf("Maximum Sub array product is %d", maxSubarrayProduct(arr, 0, n));
  81. if(count < n) // CASE 3: Zero
  82. {
  83. if((bef_num_neg)%2==0)
  84. {
  85. for(i=0; i<=(index_zero)-1; i++)
  86. max_prod_b=max_prod_b*arr[i];
  87. }
  88. if((bef_num_neg)%2==1)
  89. {
  90. max_prod_b = maxSubarrayProduct(arr, 0, n);
  91. }
  92.  
  93. if((aft_num_neg)%2==0)
  94. {
  95. for(i=(index_zero)+1; i<n; i++)
  96. {
  97. max_prod_a=max_prod_a*arr[i];
  98. }
  99. }
  100.  
  101. if((aft_num_neg)%2==1)
  102. {
  103. max_prod_a = maxSubarrayProduct(arr, index_zero+1, n);
  104. }
  105. max_prod = max(max_prod_a, max_prod_b);
  106. }
  107. printf("Max Sub array Produtc is %d", max_prod);
  108. return 0;
  109. }
  110.  
Success #stdin #stdout 0s 2252KB
stdin
Standard input is empty
stdout
Max Sub array Produtc is 14400