1. 程式人生 > >返回一個整數陣列中最大子陣列的和 C語言

返回一個整數陣列中最大子陣列的和 C語言

1、題目:返回一個整數陣列中最大子陣列的和。 2、要求:  要求程式必須能處理1000 個元素;  每個元素是int32 型別的;  輸入一個整形陣列,數組裡有正數也有負數。  陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。  求所有子陣列的和的最大值。要求時間複雜度為O(n)。 3、設計思路:  將陣列大小定義為1000,對於每個元素定義為int32型別,將求和函式設定為int 型別,這樣可以方便觀測資料的溢位,讓陣列元素可以超出範圍。 4.程式程式碼: #include<iostream>#include<time.h>#include<conio.h>#define N 1000using namespace std;void RandIn(int IntNum,int A[])   //隨機生成陣列{    cout<<"整數內容"<<endl;    for(int i=0;i<IntNum;i++)    {        A[i]=rand()-rand();        cout<<A[i];          if(i%15==4)            cout<<endl;        else            cout<<'\t';    }}void SelMax(int IntNum,int A[],auto &sum){    int buffer=0;     int count1=0;        //求和的數值個數    int count2=0;    //進行的運算次數    for(int j=0;j<=IntNum;j++)    {        if(j==IntNum)        {            j=0;        }        buffer+=A[j];        count1++;        count2++;        if(buffer<0)            {            buffer=0;            count1=0;        }        if(sum<buffer)//sum始終記錄下存在的最大和        {            sum=buffer;        }                {            break;        }    }}void main(){         int IntNum;    int A[N];    int q=0;    while(q==0)    {        auto sum=0;        srand((unsigned)time(NULL));        cout<<"請輸入陣列元素的個數:";        cin>>IntNum;        RandIn(IntNum,A);        SelMax(IntNum,A,sum);        cout<<endl;        cout<<sum<<endl;        cout<<"是否繼續測試(輸入0則繼續否則停止)";        cin>>q;        system("cls");    }} 5.執行結果
     無溢位時:                溢位時:對程式碼進行改動,在求和程式碼函式中*4294967296(也就是2的32次方)   這樣在執行程式之後就會溢位,截圖如下:  

6.實驗感想:這次實驗讓我明白了實驗程式碼簡練的重要性,演算法優化的重要性,這樣可以節省運算時間,所以這次試驗我收穫很多,下次

實驗我會更加用心,學習到更多知識,讓我更上一層樓。

7.小組相片: