天天看點

最大子數組程式二

一、設計思路:通過輸入數組的長度和數組中數的取值範圍,産生一個随機數組,并用随機數決定正負号。然後在一次循環中,将數組中的數依次相加,若相加大于0則繼續相加,若相加小于0則舍棄之前的數,重新開始相加,并且在循環中記錄相加産生的最大的數,即為最大子數組的和。

二、代碼:#include<iostream>

using namespace std;

void main()

{

    int i,x,y,z;

    int s,sum,head,end,h,e;

    cout<<"請輸入數組的長度:";

    cin>>x;

    cout<<"請輸入數組的取值範圍:";

    cin>>z;

    int *a=new int[x];

    if(x==0)

   { 

          cout<<"錯誤"<<endl;

          return 0;       

   }

    for(i=0;i<x;i++)

    {

        a[i]=rand()%z;

        y=rand()%2;

        if(y==0)

        {

            a[i]=-a[i];

        }

    }

    sum=0;

    s=0;

    e=0;

    h=0;

        s+=a[i];

        if(s>0)

            e++;

        else

            s=0;

            h=i+1;

        if(s>sum)

            sum=s;

            head=h;

            end=e;

    cout<<"最大子數組的和為:"<<sum<<endl;

    delete a;

}

三、結果截圖:

最大子數組程式二

四、代碼測試及出現的問題

     1、當輸入數組的長度為0或為負時,程式無法運作。

     2、當随機數之和不在int32的範圍之内時,隻顯示最大數

五、解決方法

     1、對輸入的數用if語句判斷,若不符合條件,直接終止程式

     2、對于随機數之和較大或較小無法顯示,應通過調整随機數範圍縮小随機數之和

六、總結

     這次對原來程式的測試對我有很大啟發,尤其是對數的範圍的判定和對輸入的數的限制,讓我在以後的程式開發中能夠注意到一些微小的細節,避免出現較大的失誤。

七、團隊開發小組成員:杜永超、郭昊

      團隊照:

最大子數組程式二