一、設計思路:通過輸入數組的長度和數組中數的取值範圍,産生一個随機數組,并用随機數決定正負号。然後在一次循環中,将數組中的數依次相加,若相加大于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、對于随機數之和較大或較小無法顯示,應通過調整随機數範圍縮小随機數之和
六、總結
這次對原來程式的測試對我有很大啟發,尤其是對數的範圍的判定和對輸入的數的限制,讓我在以後的程式開發中能夠注意到一些微小的細節,避免出現較大的失誤。
七、團隊開發小組成員:杜永超、郭昊
團隊照: