结对开发Ⅱ——二维数组求和最大的子数组
2015-03-22 22:10
232 查看
一、设计思路
(1)用输入输出流来读取.txt中的数据;
(2)用两个数来遍历要求和的子数组;
如该3x4数组中的ab两个数,可以确定一个3x3的子数组。
(3)GetSum函数来返回子数组的和;
(4)比较输出最大子数组和该数组的和。
二、源代码
三、结果截图
四、心得体会
这次也是和上次一样,我们在课上讨论好算法的实现和程序的大致框架,然后课下再具体操作。我们讨论出来的是最保守最笨的算法,但却是最万无一失的方法。本来还想上去讲一讲呢,但是同学们分享的思路都比我们的高大上,于是就此作罢。我们还自我安慰道,他们的算法比较难实现。哈哈哈。
这次是我主要敲代码,他在旁边进行代码复审,程序的格式规范了许多。我相信很多同学都有自己的编程习惯,有些习惯比较好,有些是坏习惯,有些看起来根本不会影响大局,但其实是致命的。以后工作不可能自己写出来的程序是只经自己手的,是和自己的团队一起开发。与人合作,做起码得让别人看得懂程序或者看着舒服吧。所以还是最好写成最规范最标准的。
还有就是有别人在旁边做代码复审真的挺高效的。相信大家都深有体会,自己做的题目再检查三遍,也还是可能会有错误,但是旁人检查两边可能就把所有错误都找出来了。古人说得好啊:“当局者迷旁观者清。”我们两个在写这个程序的时候出现了两个大错误:一是函数在传二维数组的时候,形参的形式不对;而是计算并比较子数组和的时候,判断条件和初始值写错了。由于是我主笔啊,我调试了两次都没完全改正确,于海洋用笔写着在纸上过了一遍,就找出了最后的错误。
我觉得结对开发吧,还是重在实行,如果两个人没有全神贯注专心致志投入到这个过程中的话,效果是不大的。两个人出全力干的活,只要有一个人没出全力,那就无法最好的实现,也就无法得到最好的体验。
五、工作照
(1)用输入输出流来读取.txt中的数据;
(2)用两个数来遍历要求和的子数组;
如该3x4数组中的ab两个数,可以确定一个3x3的子数组。
a | . | . | |
. | . | . | |
. | . | b |
(4)比较输出最大子数组和该数组的和。
二、源代码
// 最大值2.cpp : Defines the entry point for the console application. // 袁佩佩 于海洋 信1201-1班 #include "stdafx.h" #include "fstream.h" #include "iostream.h" #define MAXSIZE 50 //*****读取数组信息***** void ReadArr(int arr[][MAXSIZE],int &len1,int &len2) { ifstream infile("Arr.txt"); if(!infile) cout<<"读取失败!"<<endl; else { infile>>len1>>len2; for(int i=0;i<len1;i++) { for(int j=0;j<len2;j++) { infile>>arr[i][j]; } } } } //*****显示矩阵***** void ShowArr(int arr[][MAXSIZE],int len1,int len2,int size1,int size2) { for(int i=len1;i<=size1;i++) { for(int j=len2;j<=size2;j++) { cout<<arr[i][j]<<"\t"; } cout<<endl; } } //*****求和公式***** int GetSum(int arr[][MAXSIZE],int len1,int len2,int size1,int size2) { int sum=0; for(int i=len1;i<=size1;i++) { for(int j=len2;j<=size2;j++) { sum+=arr[i][j]; } } return sum; } int main(int argc, char* argv[]) { int len1,len2,max,sum; //len1是行数,len2是列数 int line1,line2,row1,row2; //和最大的矩阵的两个坐标 int arr[MAXSIZE][MAXSIZE]; ReadArr(arr,len1,len2); cout<<"矩阵:"<<endl; ShowArr(arr,0,0,len1-1,len2-1); cout<<endl; line1=0; line2=0; row1=0; row2=0; sum=0; max=arr[0][0]; for(int i=0;i<len1;i++) //第一个数的行数 { for(int j=0;j<len2;j++) //第一个数的列数 { for(int m=i;m<len1;m++) //第二个数的行数 { for(int n=j;n<len2;n++) { //第二个数的列数 sum=GetSum(arr,i,j,m,n); //求出这两个数构成的矩阵的和 if(sum>max) { max=sum; line1=i; //保存第一个数的行 line2=m; //保存第二个数的行 row1=j; //保存第一个数的列 row2=n; //保存第二个数的列 } } } } } cout<<"和最大的子矩阵:"<<endl; ShowArr(arr,line1,row1,line2,row2); cout<<"最大的和:"<<max<<endl; return 0; }
三、结果截图
四、心得体会
这次也是和上次一样,我们在课上讨论好算法的实现和程序的大致框架,然后课下再具体操作。我们讨论出来的是最保守最笨的算法,但却是最万无一失的方法。本来还想上去讲一讲呢,但是同学们分享的思路都比我们的高大上,于是就此作罢。我们还自我安慰道,他们的算法比较难实现。哈哈哈。
这次是我主要敲代码,他在旁边进行代码复审,程序的格式规范了许多。我相信很多同学都有自己的编程习惯,有些习惯比较好,有些是坏习惯,有些看起来根本不会影响大局,但其实是致命的。以后工作不可能自己写出来的程序是只经自己手的,是和自己的团队一起开发。与人合作,做起码得让别人看得懂程序或者看着舒服吧。所以还是最好写成最规范最标准的。
还有就是有别人在旁边做代码复审真的挺高效的。相信大家都深有体会,自己做的题目再检查三遍,也还是可能会有错误,但是旁人检查两边可能就把所有错误都找出来了。古人说得好啊:“当局者迷旁观者清。”我们两个在写这个程序的时候出现了两个大错误:一是函数在传二维数组的时候,形参的形式不对;而是计算并比较子数组和的时候,判断条件和初始值写错了。由于是我主笔啊,我调试了两次都没完全改正确,于海洋用笔写着在纸上过了一遍,就找出了最后的错误。
我觉得结对开发吧,还是重在实行,如果两个人没有全神贯注专心致志投入到这个过程中的话,效果是不大的。两个人出全力干的活,只要有一个人没出全力,那就无法最好的实现,也就无法得到最好的体验。
五、工作照
相关文章推荐
- 结对开发Ⅵ——循环二维数组求和最大的子数组
- 结对开发Ⅴ——循环一维数组求和最大的子数组
- 结对开发-- 一维数组求和最大的子数组 (大数溢出)
- 结对开发之首尾相连二维数组求最大子数组
- 结对开发-求环状二维数组最大子数组
- 结对开发-- 循环一维数组求和最大的子数组
- 3月31号周二课堂练习:结对开发----求二维数组组成的矩阵中子矩阵的最大值二
- 结对开发 二维数组的最大子数组和
- 软件工程结对开发之求二维数组中连续最大子数组之和
- 二维数组中求其中和最大的子矩阵(结对开发)
- 结对开发 二维数组的最大子数组和
- 体验结对开发的乐趣(1)--(一维数组求和最大的子数组)
- 软件工程结对开发之求二维数组中连续最大子数组之和2
- 二维数组最大子数组的和 结对开发 溢出问题
- 二维数组最大子数组的和 结对开发
- 结对开发5_循环二维数组最大字数组
- 体验结对开发的乐趣(2)--(二位数组求和最大的子数组)
- 结对开发Ⅱ—利用文本求二维数组最大的子数组的和
- 结对开发-- 一维数组求和最大的子数组的大数溢出问题
- 3月20号周五课堂练习:结对开发----求二维数组组成的矩阵中子矩阵的最大值