1. 程式人生 > >C++學習(1):最大子段和(多種解法)

C++學習(1):最大子段和(多種解法)

多少 問題: code namespace 數據 組成 amp using ()

問題:給定由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):最大子段和(多種解法)