1、實驗題目ios
返回一個二維數組中的最大子數組編程
2、實驗思路 數組
因爲咱們的能力有限,因此咱們就設計了一個3行2列的二維數組。 如今以一個例子來講明一下咱們的思想:spa
例如:輸入的二維數組是 -1 2設計
3 4 code
-5 9blog
(1)首先計算出第一行中有關-1的全部的子數組,而後計算出有關2的子數組,一樣的道理能夠計算第二行和第三行中的字數組。 ci
(2)把上面計算出來的有關行中的子數組放在一個 b[3][3]即爲 -1 1 2 的數組中。 input
3 7 4 io
-5 4 9
(3)再求b[3][3]中的子數組的最大值,此次應該是按列來求。首先計算第一列中的子數組中的最大的數,先計算-1,而後計算-1+3,而後計算-1+3+5,求出最大的來,再3+(-5)和max比較大小,求出最大的,再(-5)和max比較大小。同理求第2、三列。便可得出最大的來。
3、代碼
1 //製做人:信1201-2班 司新紅 萬彤 2 #include <iostream.h> 3 int main() 4 { 5 int a[3][2];//定義一個3*2的二維數組 6 int max; 7 int s;//求和 8 int count; 9 int b[3][3]; 10 cout<<"請輸入二維數組(3*2)中的元素:"<<endl; 11 for(int i=0;i<3;i++) 12 { 13 for(int j=0;j<2;j++) 14 { 15 cin>>a[i][j]; 16 } 17 } 18 for(i=0;i<3;i++) 19 { 20 count=0; 21 for(int j=0;j<2;j++) 22 { 23 s=0; 24 for(int l=0;l<2-j;l++) 25 { 26 s=s+a[i][j+l]; 27 b[i][count+l]=s; 28 } 29 count=count+2-j; 30 } 31 } 32 //求最大數 33 max=b[0][0]; 34 for(int j=0;j<3;j++) 35 { 36 for(i=0;i<3;i++) 37 { 38 s=0; 39 for(int r=0;r<3-i;r++) 40 { 41 s=s+b[r+i][j]; 42 if(max<s) 43 { 44 max=s; 45 } 46 } 47 } 48 } 49 cout<<"最大子數組爲:"<<max<<endl; 50 cout<<endl; 51 return 0; 52 }
4、運行結果
5、心得體會
此次的程序對於咱們來講有一點的難度,因爲以前咱們兩個編程都很差,因此好多的都是現
從書上學的。還有就是我倆剛看到這個代碼的時候,根本一點思路都沒有,並且看到題目中要求
把數組放在一個叫input.txt的文件中,我倆更是什麼都不會。因此最後就選擇了手動輸入一個二
維數組,並且二維數組還有必定的限制,採用了3行2列,由於實在沒有相處來如何自定義行和列
數。再比較大小的時候,因爲是二維數組,不像一維數組那樣簡單,因此開始沒有一點思路,比
較大小那,就採用了同窗的一點思想。經過我倆一塊兒編程,想如何作,我感受收穫仍是挺多的,
能夠互補,在編程中也找到了一點點的成就感。
我和個人小夥伴