求给定数组中最大子序列和中的最大值(代码实现)

题目:给定一组整数,求出这组数字子序列和中的最大值,只要求出最大子序列的和,不必求出最大值对应的序列。

最大子序列和:整数序列 A1, A2,... An (可能有负数),求 A1An 的一个子序列 AiAj,使得 Ai 到 Aj 的和最大。

例如:序列:0, -3, 6, 8, -20, 21, 8, -9, 10, -1, 3, 6, 5,则最大子序列和为 43。

代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define GET_ARRAY_LEN(array, len) {len = sizeof(array) / sizeof(array[0]);}//定义一个带参数的宏,将数组的长度存储在变量len中
 4 
 5 int main()
 6 {
 7     int array[] = {0, -3, 6, 8, -20, 21, 8, -9, 10, -1, 3, 6, 5};
 8     int i, j, len, max;
 9     GET_ARRAY_LEN(array, len);
10     max = array[0];    //初始化最大值
11 
12     for(i = 0; i < len; i++){
13         int temp = array[0];
14         for(j = i+1; j < len; j++){
15             temp += array[j];
16             if(temp > max)
17                 max    = temp;
18         }
19     }
20 
21     printf("最大子序列和为: %d\n", max);
22     return 0;
23 }

上述代码中值得学习并记住的地方是第3行代码:定义一个带参数的宏,将数组的长度存储在变量len中。

 #define GET_ARRAY_LEN(array, len) {len = sizeof(array) / sizeof(array[0]);}

其中的sizeof(array)表示的是整个数组的大小,而sizeof(array[0])则表示数组中一个元素的大小。整个数组的大小除以其中元素的大小得到的就是数组的长度啦。注意数组中每个元素的大小是一样的,所以可以这样求得数组长度。

猜你喜欢

转载自www.cnblogs.com/lucky-tam1201/p/11204629.html