码迷,mamicode.com
首页 > 编程语言 > 详细

(4)C语言——求最大连续子序列和

时间:2017-08-22 17:37:48      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:printf   数字   main   穷举法   时间   ++   else   i++   for   

题目:

输入一组整数,求出这组数字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那个序列。例如:

序列:-2 11 -4 13 -5 -2,则最大子序列和为20。

序列:-6 2 4 -7 5 3 2 -1 6 -9 10 -2,则最大子序列和为16。

 

1.

 1 /*
 2     算法一:穷举法(3个for)
 3             时间复杂度:O(n^3)
 4 
 5 */
 6 #include <stdio.h>
 7 #include <malloc.h>
 8 
 9 int Max = 0;
10 int find_max(int len, int arr[]){
11     int i, j, k, sum;
12     for(i=0; i<len; i++){
13         for(j=i; j<len; j++){
14             sum = 0;
15             for(k=i; k<=j; k++){
16                 sum += arr[k];
17             }
18             if(sum > Max){
19                 Max = sum;
20             }
21         }
22     }
23     return Max;
24 
25 } 
26 
27 int main(){
28     int i, len, *arr;
29     printf("请输入数组的长度: ");
30     scanf("%d",&len);
31     arr = (int *)malloc(sizeof(int)*len);
32     printf("请输入数组的值:");
33     for(i=0; i<len; i++){
34         scanf("%d",&arr[i]);
35     }
36     find_max(len,arr);
37     printf("最大连续子序列和 :%d\n", Max );
38     
39     return 0;
40 }

2.

 

 1 /*
 2     算法二:算法一的优化 (2个for)
 3             时间复杂度:O(n^2)
 4 */
 5 #include <stdio.h>
 6 #include <malloc.h>
 7 
 8 int Max = 0;
 9 int find_max(int arr[],int n, int len){
10       int i, sum = 0;
11     for(i=n; i<len; i++){
12         sum += arr[i];
13         if(sum > Max){
14             Max = sum ;    
15         }
16     }
17     return Max;
18 } 
19 
20 int main(){
21     int i, len,  *arr;
22     printf("请输入数组的长度:");
23     scanf("%d",&len);
24     arr = (int *)malloc(sizeof(int)*len);
25     printf("请输入数组的值:");
26     for (i=0; i<len; i++)
27     {
28         scanf("%d", &arr[i]);
29     }
30 
31     
32     for(i=0; i<10; i++){
33        find_max(arr,i, len);
34     }
35         
36     printf("最大连续子序列和:%d \n",Max);
37 
38     return 0;
39 }

 

3.

 1 /*
 2     算法三:联机算法
 3     时间复杂度:O(n)
 4 */
 5 #include <stdio.h>
 6 #include <malloc.h>
 7 
 8 int Max = 0;
 9 int find_max(int len, int arr[])
10 {
11     int i, sum = 0;
12     for(i=0; i<len; i++)
13     {
14         sum += arr[i];
15         if(sum  > Max)
16         {
17             Max = sum;
18         }else if(sum < 0){
19             sum = 0;
20         }    
21     }
22 
23     return Max;
24 }
25 
26 int main(){
27     int i, len, *arr;
28     printf("请输入数组的长度:");
29     scanf("%d",&len);
30     arr = (int *)malloc(sizeof(int)*len);
31     printf("请输入数组的值:");
32     for (i=0; i<len; i++)
33     {
34         scanf("%d", &arr[i]);
35     }
36     find_max(len, arr);
37     printf("最大连续子序列和:%d \n",Max);
38     return 0;
39 }

参考:http://blog.163.com/kevinlee_2010/blog/static/169820820201010495438247/

 

(4)C语言——求最大连续子序列和

标签:printf   数字   main   穷举法   时间   ++   else   i++   for   

原文地址:http://www.cnblogs.com/LinSL/p/7412489.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!