二维数组最大子数组和
2015-03-26 17:59
295 查看
一.实验题目
求一个二维数组中和最大的子数组。
二.实验思路
基于我们第一次合作时求的一位数组最大子数组,加上一层循环来遍历二维数组中的所有子矩阵的情况。
第一步:先利用上次的方法求每一行的情况,将每行结果存入一个一位数组中,构成一个二维数组A[][]。
第二步:将上述二维数组每一列利用求每一行的方法再次遍历。将每个结果与A[][]中的值比较取大值。
第三步:输出这个最大值。
三.代码
四.运行截图
五.收获体会
第一点,这次结对开发的过程让我学会了利用已有资源进行程序的开发,正是有了上次一位数组求最大子数组的基础,这次求二维数组最大子数组才有了正确的思路。
第二点,这是和世通的第二次结对开发程序,他的思路很清晰,编程能力也很好,有很多值得我学习的地方。以后应该还有很多合作的机会,我都会珍惜的。
第三点,我觉得结对开发这个主意应该早点应用到我们的学习中,这种方法下我们会尽力去思考问题的解决方法,基础差一点的在另一方的影响下也会学到不少实用的东西。而不是遇见不会的就百度一个程序去应付老师而造成恶性循环,给自己扣上一个“不会编程”的帽子来逃避。
六.合影
求一个二维数组中和最大的子数组。
二.实验思路
基于我们第一次合作时求的一位数组最大子数组,加上一层循环来遍历二维数组中的所有子矩阵的情况。
第一步:先利用上次的方法求每一行的情况,将每行结果存入一个一位数组中,构成一个二维数组A[][]。
第二步:将上述二维数组每一列利用求每一行的方法再次遍历。将每个结果与A[][]中的值比较取大值。
第三步:输出这个最大值。
三.代码
// ketang5.cpp : 定义控制台应用程序的入口点。 //人员: 张世通 梁世豪 #include "stdafx.h" #include "iostream" #include "fstream" using namespace std; /*二维数组压缩函数*/ void yasuo(int **Source,int **Destion,int row,int line) {//将每一行的数组元素都用枚举法求出子数组 int i,j,add,count; for(i=0;i<row;i++) { count=0; for(j=0;j<line;j++) { add=0; for(int l=0;l<line-j;l++) //每一行按顺序进行枚举存入数组中 { add=add+Source[i][j+l]; Destion[i][count+l]=add; } count=count+line-j; } } } /*求最大值函数*/ int Max(int **Destion,int row,int line) { int i,j,add,max; max=Destion[0][0]; //将数组的第一个数赋值给max for(j=0;j<line;j++) { for(i=0;i<row;i++) { add=0; for(int r=0;r<row-i;r++) { add=add+Destion[r+i][j]; //逐列对数组进行枚举,求最大值 if(max<add) { max=add; } } } } return max; } /*数组初始化*/ void chushihua(int**Arr,int row,int line) { cout<<"请输入数组数据"<<endl; for(int i=0;i<row;i++) { for(int j=0;j<line;j++) { cin>>Arr[i][j]; } } } /*释放空间*/ void Delete(int **Arr,int row) { for(int i=0;i<row;i++) { delete[]Arr[i]; } delete[]Arr; } int main() { char s; int row,col1,col2; //定义行数列数 cout<<"请输入行数:"; cin>>row; cout<<"请输入列数:"; cin>>col1; int **A; //动态定义二维数组 int **B; col2=col1*(col1+1)/2; A=new int*[row]; for(int k=0;k<row;k++) { A[k]=new int[col1]; } B=new int*[row]; for(int l=0;l<row;l++) { B[l]=new int[col2]; } chushihua(A,row,col1); yasuo(A,B,row,col1); int max=Max(B,row,col2); cout<<"最大子数组之和为:"<<max<<endl; cout<<endl; cout<<"是否继续(Y/N)"; cin>>s; while(s!='Y'&&s!='y'&&s!='N'&&s!='n') { cout<<"输入错误,请重新输入(Y/N)"; cin>>s; } if(s=='Y'||s=='y') { main(); } else //释放数组空间 { Delete(A,row); Delete(B,row); } return 0; }
四.运行截图
五.收获体会
第一点,这次结对开发的过程让我学会了利用已有资源进行程序的开发,正是有了上次一位数组求最大子数组的基础,这次求二维数组最大子数组才有了正确的思路。
第二点,这是和世通的第二次结对开发程序,他的思路很清晰,编程能力也很好,有很多值得我学习的地方。以后应该还有很多合作的机会,我都会珍惜的。
第三点,我觉得结对开发这个主意应该早点应用到我们的学习中,这种方法下我们会尽力去思考问题的解决方法,基础差一点的在另一方的影响下也会学到不少实用的东西。而不是遇见不会的就百度一个程序去应付老师而造成恶性循环,给自己扣上一个“不会编程”的帽子来逃避。
六.合影
相关文章推荐
- 二维数组最大连通子数组之和
- 求二维数组最大子数组和 刘博&徐梦迪
- 查找二维数组中子数组之和最大值 郭莉莉&&李亚文
- 二维数组的连续子数组的最大和
- 结对开发求二维数组值最大的子数组(只要连续即可)
- 编程之美2.15 二维数组最大子数组的和(数组下标从(1,1)開始)
- 二维数组最大子数组溢出问题
- 子数组之和最大值(二维数组)
- 返回一个首尾相连的二维数组的最大子数组的和
- 求二维数组的最大子数组———曹玉松&&蔡迎盈
- 结对开发 二维数组的最大子数组和
- 结对开发5_循环二维数组最大字数组
- 返回二维数组最大联通子数组的和
- 软件工程概论---环状二维数组最大子数组和
- POJ1050二维数组的最大子数组和
- 求二维数组的子数组中的最大值!
- 二维数组的最大子数组之和
- 返回二维数组最大子数组的和(2)
- 求二维数组的子数组的和的最大值
- 二维数组,求最大的子数组(刘若凡 刘梦辉)