返回一个二维数组中的最大子数组
一、实验题目
返回一个二维数组中的最大子数组
二、实验思路
由于我们的能力有限,所以我们就设计了一个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列,因为实在没有相处来如何自定义行和列
数。再比较大小的时候,由于是二维数组,不像一维数组那样简单,所以开始没有一点思路,比
较大小那,就采用了同学的一点思想。通过我俩一起编程,想如何做,我感觉收获还是挺多的,
可以互补,在编程中也找到了一点点的成就感。
我和我的小伙伴