首页 > 编程语言 > 详细

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

时间:2019-07-18 09:45:31      阅读:74      评论:0      收藏:0      [点我收藏+]

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

最大子序列和:整数序列 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])则表示数组中一个元素的大小。整个数组的大小除以其中元素的大小得到的就是数组的长度啦。注意数组中每个元素的大小是一样的,所以可以这样求得数组长度。

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

原文:https://www.cnblogs.com/lucky-tam1201/p/11204629.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!