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