一、實驗題目
返回一個二維數組中的最大子數組
二、實驗思路
由於我們的能力有限,所以我們就設計了一個3行2列的二維數組。 現在以一個例子來說明一下我們的思想:
例如:輸入的二維數組是 -1 2
3 4
-5 9
(1)首先計算出第一行中有關-1的所有的子數組,然後計算出有關2的子數組,同樣的道理可以計算第二行和第三行中的字數組。
(2)把上面計算出來的有關行中的子數組放在一個 b[3][3]即為 -1 1 2 的數組中。
3 7 4
-5 4 9
(3)再求b[3][3]中的子數組的最大值,這次應該是按列來求。首先計算第一列中的子數組中的最大的數,先計算-1,然後計算-1+3,然後計算-1+3+5,求出最大的來,再3+(-5)和max比較大小,求出最大的,再(-5)和max比較大小。同理求第二、三列。即可得出最大的來。
三、代碼
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 }
四、運行結果


五、心得體會
這次的程序對於我們來說有一點的難度,由於之前我們兩個編程都不好,所以好多的都是現
從書上學的。還有就是我倆剛看到這個代碼的時候,根本一點思路都沒有,而且看到題目中要求
把數組放在一個叫input.txt的文件中,我倆更是什麼都不會。所以最後就選擇了手動輸入一個二
維數組,而且二維數組還有一定的限制,采用了3行2列,因為實在沒有相處來如何自定義行和列
數。再比較大小的時候,由於是二維數組,不像一維數組那樣簡單,所以開始沒有一點思路,比
較大小那,就采用了同學的一點思想。通過我倆一起編程,想如何做,我感覺收獲還是挺多的,
可以互補,在編程中也找到了一點點的成就感。
我和我的小伙伴
