/* Include lib */
#include <stdio.h>
#include <string.h>
/* Define */
#define ARRAY_MAX 9
#define ARRAY_INPUT { -2, 1, -3, 4, -1, 2, 1, -5, 4 }
int array_input[ARRAY_MAX] = ARRAY_INPUT;
/* API */
/* API sum of array input */
int sum_array(int *arr, int size, int *sum)
{
int i;
if (!arr || !sum) {
printf("NULL input !!\n");
return -1;
}
if (size == 0) {
printf("Empty size !!\n");
return -1;
}
*sum = 0;
for (i = 0; i < size; i++)
*sum = *sum + arr[i];
// printf("\n\nSub array: ");
// for (i = 0; i < size; i++) {
// printf("%d ", arr[i]);
// }
// printf("\n");
// printf("Sum = %d\n", *sum);
return 0;
}
/* Main func interract with user */
int main()
{
int prev_arr[ARRAY_MAX] = { 0 };
int i, j, ret, last = ARRAY_MAX - 1;
int curr_sum, prev_sum, prev_size;
/* Print array input */
printf("Input array: ");
for (i = 0; i < ARRAY_MAX; i++) {
printf("%d ", array_input[i]);
}
printf("\n");
/* Loop with each size for sub-array: 1 -> 2 -> 3 -> ... -> ARRAY_MAX */
prev_sum = 0;
prev_size = 0;
for (i = 1; i <= ARRAY_MAX; i++) {
/* With each size, loop to find combination of contiguous elements. Then sum */
for (j = 0; j <= (last - (i - 1)); j++) {
ret = sum_array(&array_input[j], i, &curr_sum);
/* Compare sum with previous sum. Store bigger result and that sub-array to backup */
if (ret == 0) {
if (prev_size == 0 || curr_sum > prev_sum) { /* First times or find bigger sum */
prev_sum = curr_sum;
memset(&prev_arr[0], 0, sizeof(int) * ARRAY_MAX);
memcpy(&prev_arr[0], &array_input[j], sizeof(int) * i);
prev_size = i;
}
}
}
}
/* Print final biggest result and that according subarray */
printf("Sub array: ");
for (i = 0; i < prev_size; i++) {
printf("%d ", prev_arr[i]);
}
printf("\n");
printf("Sum = %d\n", prev_sum);
return 0;
}
To embed this project on your website, copy the following code and paste it into your website's HTML: