組員:燕亞峰 20122914
王童博 20122823
一、題目及要求:
返回乙個整數陣列中最大子陣列的和
如果陣列a[0]...a[j-1]首尾相鄰,允許a[i-1]...a[n-1],a[0]...a[j-1]之和最大;同時返回最大子陣列的位置。
二、設計思路:
對於這題本想延用一維陣列的方法,不過由於陣列進行了整合,始末位置無法判斷。所以此種方法斷然沒有實現。
可以形成乙個固定長度的視窗,依次相加比較。
首先將為兩種情況,一種是跨越a[n-1],a[0]的。一種是沒有跨越的。
對於沒有跨越的,方法很多。對於跨零點的,則可以轉換成求其子陣列最小和。由於陣列總和確定。對於中間那段必定為最小和。總和減最小和求出最大和。對於兩個最大和進行比較。得到最終結果。
三、**
#include#include四、截圖struct
ret;
struct ret max2(int arry,int length) //
跨越arry[n-1]、arry[0]的最大和
else
if(minsum>=sum)
total=total+arry[i];
}total=total+arry[0
]; minsum=total-minsum;
struct ret ret1=;
return
ret1;
}struct ret max1(int arry,int length) //
不跨越零點的最大和
else
if(maxsum<=sum)
}struct ret ret1=;
return
ret1;
}int
main()
cout
<
struct ret w=max2(a,n); //
呼叫max2函式,求跨越零點的最值
struct ret q=max1(a,n);
if(w.max>q.max)
else
return0;
}
五、實驗總結
通過這次試驗我發現我們的合作越來越默契了,我們交流溝通也在很愉快的氣氛中進行,以前都是吵吵鬧鬧的。這次試驗有兩種情況,一種是跨越a[n-1],a[0]的,一種是沒有跨越的。對於沒有跨越的,方法很多。對於跨零點的,可以轉換成求其子陣列最小和。由於陣列總和確定。對於中間那段必定為最小和。總和減最小和求出最大和。對於兩個最大和進行比較,得到最終結果。
六、合照
陣列2 陣列首尾相接,求最大子陣列
結對開發我的隊友王春帆,學號20132902部落格位址 設計思路 輸入陣列 4 2 7 a 0 sz 0 a 1 max a 0 sz 1 sz 1 a 2 max a 1 sz 2 sz 2 a 3 max a 2 sz 3 sz 3 max a 0 a 1 a n 同樣要用到陣列 的思想,由於可...
二維陣列求子陣列之和最大值(首尾相接, 圓柱)
問題 求二維陣列的子陣列之和的最大值 首尾相接,即形成圓柱 成員 陳晨 負責 複審和 測試計畫 王穎瑞 負責程式分析,程式設計 思路 對於這個問題,我們可以結合之前的實驗 二維陣列求子陣列之和的最大值和首尾相連一維陣列的子陣列之和的最大值 把為二維陣列的列擴大二倍,之後想一維陣列 首尾相連 一樣,把...
最大子陣列的和首尾相接(3)
include using namespace std define nu 5 int main int a nu cout 隨機產生陣列為 for int i 0 icoutint j 1 while j xif b 0 b a j nu if jx j else break else b a j...