数组练习2
?結(jié)對開發(fā):張哲 ?張曉菲
題目:返回一個數(shù)組中子數(shù)組最大和,數(shù)組可以首尾相連。
一、實(shí)驗(yàn)思路
? ?本次實(shí)驗(yàn)在第一次的基礎(chǔ)上增加了一些難度,數(shù)組可以首尾相連組成一個環(huán),我們兩個經(jīng)過思考和討論后得到一個方法:
1、在對環(huán)的特殊性研究后,我們可以將一個環(huán)拆成一個鏈,即:5 -1 3 3 拆成5 -1 3 3 5 -1 3 這個環(huán)每次從開始位置四個四個組隊(duì),即5 -1 3 3 、-1 3 3 5、3 3 5 -1、3 5 -1 3 ,然后利用for循環(huán),計算其最大子數(shù)組和,這樣即可以達(dá)到一個環(huán)所呈現(xiàn)的結(jié)果。
2、對于記錄位置這個問題,我們定義了cstart start end三個變量來表示,cstart記錄每次循環(huán)最大子數(shù)組和的位置,start記錄最終最大子數(shù)組和的位置,end則記錄最大子數(shù)組和終點(diǎn)的位置。
二、程序代碼
1 //返回一個整數(shù)數(shù)組中最大子數(shù)組的和 2 //有正數(shù)、有負(fù)數(shù)、數(shù)組中連續(xù)的一個或多個整數(shù)組成一個子數(shù)組,每個子數(shù)組都有一個和、將數(shù)組首尾相連、返回最大子數(shù)組的位置 3 //張哲、張曉菲 2016/3/22 4 5 #include<iostream> 6 using namespace std; 7 8 #define N 10000 9 int main() 10 { 11 int num, arr[N]; 12 int sum = 0; 13 cout << "請輸入數(shù)組元素個數(shù):"; 14 cin >> num; 15 cout << "請輸入數(shù)組元素的值:"; 16 for (int i = 0; i<num; i++)//輸入環(huán)狀數(shù)組的元素值 17 { 18 cin >> arr[i]; 19 } 20 for (int i = num; i<(2 * num - 1); i++)//將環(huán)抻直,例如環(huán)狀數(shù)組值原先為[A,B,C,D],那么抻直之后為[A,B,C,D,A,B,C] 21 { 22 arr[i] = arr[i%num]; 23 } 24 cout << "環(huán)抻直之后的數(shù)組相當(dāng)于:" << endl; 25 for (int i = 0; i<(2 * num - 1); i++) 26 { 27 cout << arr[i] << " "; 28 } 29 cout << endl; 30 31 int max = arr[0]; 32 int end, start, cstart;//end為結(jié)束位置 start為起始位置 33 34 //求子數(shù)組最大和 35 for (int j = 0; j<num; j++) 36 { 37 sum = 0; 38 for (int i = j; i<j + num; i++) 39 { 40 if (sum <= 0) 41 { 42 sum = arr[i]; 43 cstart = i;//當(dāng)前最大子數(shù)組的起始位置 44 } 45 else 46 sum = sum + arr[i]; 47 if (sum>max) 48 { 49 max = sum; 50 start = cstart; 51 end = i;//最大子數(shù)組的終止位置 52 } 53 } 54 } 55 cout << "子數(shù)組和的最大值為:" << max << endl; 56 cout << "最大子數(shù)組的起始位置為環(huán)抻直后的第" << start + 1 << "個元素,結(jié)束位置為環(huán)抻直后的第" << end+1 << "個元素。" << endl; 57 return 0; 58 }三、實(shí)驗(yàn)結(jié)果截圖
結(jié)果中給出了拆開后的數(shù)組,數(shù)組的位置從1開始,數(shù)組位置記錄的是拆開后的位置。
四、時間記錄日志
| 日期 | 開始時間 | 結(jié)束時間 | 中斷時間(min) | 凈時間(min) | 活動 | 備注 |
| 3月21號 星期一 | 14:00 | 15:50 | 10(課間) | 100 | 聽課 | 軟件工程 |
| ? | 20:00? | 22:00 | 0? | ?120 | 編程 | 一維數(shù)組1 |
| 3月22號 星期二 | 19:50 | 20:40 | 0 | 50 | 編程 | 一維數(shù)組1 |
| 3月23號 星期三 | 15:00 | 14:00 | 10(休息) | 50 | 看書 | 構(gòu)建之法 |
| ? | 20:00 | 21:15 | 0(休息) | 75 | 編程 | 一維數(shù)組1 |
| 3月24號 星期四 | 14:00 | 15:50 | 10(課間) | 100 | 聽課 | 軟件工程 |
| ? | 20:30 | 22:00 | 10(休息) | 80 | 編程 | 一維數(shù)組2 |
| 3月25號 星期五 | 16:30 | 17:00 | 0(休息) | 70 | 編程 | 一維數(shù)組2 |
| ? | 21:00 | 22:00 | 0 | 60 | 編程 | 一維數(shù)組2 |
| 3月26號 星期六 | 9:00 | 10:00 | 0 | 80 | 編程 | 一維數(shù)組2程序進(jìn)行 修改、寫博客 |
轉(zhuǎn)載于:https://www.cnblogs.com/zz0906/p/5322030.html
總結(jié)