您的位置:首页 > 其它

结对开发Ⅱ——二维数组求和最大的子数组

2015-03-22 22:10 232 查看
一、设计思路

(1)用输入输出流来读取.txt中的数据;

(2)用两个数来遍历要求和的子数组;

如该3x4数组中的ab两个数,可以确定一个3x3的子数组。

a..
...
..b
(3)GetSum函数来返回子数组的和;

(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;
}


三、结果截图







四、心得体会

这次也是和上次一样,我们在课上讨论好算法的实现和程序的大致框架,然后课下再具体操作。我们讨论出来的是最保守最笨的算法,但却是最万无一失的方法。本来还想上去讲一讲呢,但是同学们分享的思路都比我们的高大上,于是就此作罢。我们还自我安慰道,他们的算法比较难实现。哈哈哈。

这次是我主要敲代码,他在旁边进行代码复审,程序的格式规范了许多。我相信很多同学都有自己的编程习惯,有些习惯比较好,有些是坏习惯,有些看起来根本不会影响大局,但其实是致命的。以后工作不可能自己写出来的程序是只经自己手的,是和自己的团队一起开发。与人合作,做起码得让别人看得懂程序或者看着舒服吧。所以还是最好写成最规范最标准的。

还有就是有别人在旁边做代码复审真的挺高效的。相信大家都深有体会,自己做的题目再检查三遍,也还是可能会有错误,但是旁人检查两边可能就把所有错误都找出来了。古人说得好啊:“当局者迷旁观者清。”我们两个在写这个程序的时候出现了两个大错误:一是函数在传二维数组的时候,形参的形式不对;而是计算并比较子数组和的时候,判断条件和初始值写错了。由于是我主笔啊,我调试了两次都没完全改正确,于海洋用笔写着在纸上过了一遍,就找出了最后的错误。

我觉得结对开发吧,还是重在实行,如果两个人没有全神贯注专心致志投入到这个过程中的话,效果是不大的。两个人出全力干的活,只要有一个人没出全力,那就无法最好的实现,也就无法得到最好的体验。

五、工作照

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: