一.实验要求:
在上次实验的基础上,把数组改为二维数组,然后实现最大子数组结果的输出,相比较而言,实验更加的困难,所以我和小伙伴进行了进一步的合作。
实验思路:
二、实验思路
由于我们的能力有限,所以我们就设计了一个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比较大小。同理求第二、三列。即可得出最大的来。
三、代码
//制作人:信1201-2班 司新红 万彤 #include <iostream.h> int main() { int a[3][2];//定义一个3*2的二维数组 int max; int s;//求和 int count; int b[3][3]; cout<<"请输入二维数组(3*2)中的元素:"<<endl; for(int i=0;i<3;i++) { for(int j=0;j<2;j++) { cin>>a[i][j]; } } for(i=0;i<3;i++) { count=0; for(int j=0;j<2;j++) { s=0; for(int l=0;l<2-j;l++) { s=s+a[i][j+l]; b[i][count+l]=s; } count=count+2-j; } } //求最大数 max=b[0][0]; for(int j=0;j<3;j++) { for(i=0;i<3;i++) { s=0; for(int r=0;r<3-i;r++) { s=s+b[r+i][j]; if(max<s) { max=s; } } } } cout<<"最大子数组为:"<<max<<endl; cout<<endl; return 0; }
四、运行结果
五、心得体会
这次的实验更加确认了老师的训练模式,越来越难,有点困难了。之前的思路准备了好久,迟迟没有动手,后面编程也是比较纠结,因为不会的东西还是蛮多,以后要加油了,下面是我和我的小伙伴。(承认自己有点坑队友,索瑞啦,我改)