首页 > 编程语言 > 详细

C++学习(1):最大子段和(多种解法)

时间:2017-08-15 09:30:28      阅读:222      评论:0      收藏:0      [点我收藏+]

问题:给定由n个数(可能为负数)组成的序列a1,a2,a3,...,an,求该序列子段和的最大值。

第一种解法:(最容易考虑的方法,将所有的子段一一相加,然后比较)

 1 #include<iostream>
 2 using namespace std;
 3 int Maxsum(int n,int *a,int &besti,int &bestj)
 4 {
 5     int sum = 0;
 6     for(int i=1;i<=n;i++)
 7     {
 8         int thissum = 0;
 9         for(int j=i;j<=n;j++)
10         {
11             thissum +=a[j];
12             if(thissum>sum)
13             {
14                 sum = thissum;
15                 besti = i;
16                 bestj = j;
17             }
18         }
19     }
20     return sum;
21 }
22 
23 int main()
24 {
25     int Case = 1;
26     int T;//共有多少组数
27     cin>>T;
28     while(T>0)
29     {
30         T--;
31         int sum;
32         int N = 9;//一组有多少个数据
33         cin>>N;
34         int* array = new int[N+1];
35         for(int i=1;i<=N;i++)
36         {
37             cin>>array[i];
38         }
39         int besti,bestj;
40         sum = Maxsum(N,array,besti,bestj);
41         cout<<"Case "<<Case<<":"<<endl;
42         cout<<sum<<" "<<besti<<" "<<bestj<<endl;
43 
44         if(T>0)
45         {
46             cout<<endl;
47         }
48         Case++;
49     }
50     return 0;
51 }

 

C++学习(1):最大子段和(多种解法)

原文:http://www.cnblogs.com/xcxfuryit/p/7363165.html

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