1. 程式人生 > >用c++實現環形陣列的最大子陣列的和

用c++實現環形陣列的最大子陣列的和

分析:對環形陣列確定首元素,從而變成一位陣列。因為有n個元素,所以有n種情況

如圖:

程式程式碼:

#include<iostream>
using namespace std;
int max_sum1(int a[],int n)
{
    int max_sum_h=a[0];
    int t,k=n-1;
    while(k)
    {
         int sum=a[0];
         int max_sum=a[0];
         for(int i=1;i<n;i++)
         {
             if
(sum>0) //從第一個數開始判斷是否為正數 { sum=sum+a[i]; //是正數,將和值(初始值為p【0】)和第i+1個數做和。 if(sum>max_sum) // 並判斷是否為最大,是讓其賦值給max_sum,並將子陣列末位置改變。 { max_sum=sum; } } else { sum
=a[i]; //是負數,將第i+1個數的值賦值給和值sum if(sum>max_sum)//並判斷是否為最大,是讓其賦值給max_sum,並將子陣列初、末位置改變。 { max_sum=sum; } } } //每一種結果比較一次,一共比較n-1次 if(max_sum_h<=max_sum) { max_sum_h=max_sum; }
//實現環形陣列的變化成一維陣列 t=a[n-1]; for(int i=n-1;i>0;i--) { a[i]=a[i-1]; } a[0]=t; //這個過程實現所有數字像左移動一位 k--; } return max_sum_h; //得到每次迴圈後的最大值 } int main() { int n,star=0,end=0; cout<<"please input the length of the array:"<<endl; cin>>n; int *p=new int[n]; cout<<"please input the int array:"<<endl; for(int i=0;i<n;i++) { cin>>p[i]; } cout<<"the max of the array:"<<max_sum1(p,n)<<endl; return 0; }

結果截圖:

實驗總結:其實迴圈陣列和一維陣列本質上是一樣的,程式上只是增加了一個迴圈。