题目:给定一组整数,求出这组数字子序列和中的最大值,只要求出最大子序列的和,不必求出最大值对应的序列。
最大子序列和:整数序列 A1, A2,... An (可能有负数),求 A1
An 的一个子序列 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])则表示数组中一个元素的大小。整个数组的大小除以其中元素的大小得到的就是数组的长度啦。注意数组中每个元素的大小是一样的,所以可以这样求得数组长度。
转载于:https://www.cnblogs.com/lucky-tam1201/p/11204629.html