5、软件工程结对开发之求一维数组中连续最大子数组之和
2015-04-02 19:56
309 查看
一、题目:返回一个二维整数数组中最大子数组的和。
二、要求:
输入一个二维整形数组,数组里有正数也有负数。
二维数组首尾相接,象个一条首尾相接带子一样。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
三、设计思想
这个实验是在前几次实验的基础上,利用动态数组,为了满足首尾相连,所以在计算一次之后,要把该数放在数组的最后边,这样循环遍历最后求出最大子数组的和。
四、源代码
五、实验总结
本次试验,我们俩互换了角色,我负责代码编写、程序分析,檀威负责代码复审和代码测试计划,体会到了角色互换后的不同的感受,实验中我们改了好多次,对变量的重复利用不恰当,有时候不同的含义变量我们却用了相同的变量表示,有些混乱,以后在编程时要先考虑好变量的含义,做到见名知义。
六、合作照片
二、要求:
输入一个二维整形数组,数组里有正数也有负数。
二维数组首尾相接,象个一条首尾相接带子一样。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
三、设计思想
这个实验是在前几次实验的基础上,利用动态数组,为了满足首尾相连,所以在计算一次之后,要把该数放在数组的最后边,这样循环遍历最后求出最大子数组的和。
四、源代码
#include <iostream.h> int maxSubArray(int **a,int n,int m) { int **p=new int* ; int i,j; if(m==0||n==0) return 0; //计算p[i][j] for(i=0;i<n;i++) { p[i]=new int[m]; for(j=0;j<m;j++) { if(i==0) { if(j==0) p[i][j]=a[i][j]; else p[i][j]=p[i][j-1]+a[i][j]; } else { if(j==0) p[i][j]=p[i-1][j]+a[i][j]; else p[i][j]=p[i][j-1]+p[i-1][j]-p[i-1][j-1]+a[i][j]; } } } //计算二维数组最大子数组的和 int temp; int max=a[0][0];//初始化 int sum; if(m==1) { for(i=0;i<n;i++) { for(j=i;j<n;j++) { if(i==0) { temp=p[j][m-1]; } else { temp=p[j][m-1]-p[i-1][m-1]; } if(sum<temp) sum=temp; } } } else { for(i=0;i<n;i++) { for(j=i;j<n;j++) { if(i==0) { temp=p[j][m-1]-p[j][m-2]; } else { temp=p[j][m-1]-p[j][m-2]-p[i-1][m-1]+p[i-1][m-2]; } for(int k=m-2;k>=0;k--) { if(temp<0) temp=0; if(i==0) { if(k==0) temp+=p[j][k]; else temp+=p[j][k]-p[j][k-1]; } else { if(k==0) temp+=p[j][k]-p[i-1][k]; else temp+=p[j][k]-p[j][k-1]-p[i-1][k]+p[i-1][k-1]; } if(sum<temp) sum=temp; } } } } return sum; } int main() { int n;//行数 int m;//列数 int sum;//最大子数组的和 int i,j; cout<<"请输入二维数组的行数:"<<endl; cin>>n; cout<<"请输入二维数组的列数"<<endl; cin>>m; int **a=new int* ; cout<<"请输入该二维数组元素:"<<endl; for(i=0;i<n;i++) { a[i]=new int[m]; for(j=0;j<m;j++) { cin>>a[i][j]; } } sum=maxSubArray(a,n,m); cout<<"二维数组的最大子数组之和:"<<sum<<endl; return 0; }
五、实验总结
本次试验,我们俩互换了角色,我负责代码编写、程序分析,檀威负责代码复审和代码测试计划,体会到了角色互换后的不同的感受,实验中我们改了好多次,对变量的重复利用不恰当,有时候不同的含义变量我们却用了相同的变量表示,有些混乱,以后在编程时要先考虑好变量的含义,做到见名知义。
六、合作照片
相关文章推荐
- 3、软件工程结对开发之求一维数组中连续最大子数组之和并判断溢出
- 软件工程结对开发之求一维数组中连续最大子数组之和2
- 1、软件工程结对开发之求一维数组中连续最大子数组之和
- 4、软件工程结对开发之求一维数组中连续最大子数组之和
- 软件工程结对开发之求一个或者多个数组中连续最大子数组之和3
- 2、软件工程结对开发之求二维数组中连续最大子数组之和
- 软件工程结对开发——一维最大子数组求和溢出问题
- 软件工程结对开发之求一个数组中连续最大子数组之和
- 软件工程结对开发之求二维数组中连续最大子数组之和
- 结对开发求二维数组值最大的子数组(只要连续即可)
- 结对开发——求环形一维数组最大子数组的和
- 体验结对开发的乐趣(4)--(首尾相连的一维数组求最大子数组和的问题)
- 软件工程课堂训练——结对开发之环数组最大和
- 软件工程结对开发之求二维数组中连续最大子数组之和2
- 结对开发——环形一维数组求最大子数组和
- 体验结对开发的乐趣(3)--(一维数组求最大子数组的和溢出问题)
- 结对开发--循环一维数组求最大子数组的和
- 结对开发Ⅱ—利用文本求二维数组最大的子数组的和
- 结对开发 二维数组的最大子数组和
- 体验结对开发的乐趣(2)--(二位数组求和最大的子数组)