一、题目
1、返回一个二维数组中最大子数组的和。
2、要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
程序要使用的数组放在一个叫 input.txt 的文件中, 文件格式是:
数组的行数,数组的列数,每一行的元素, (用逗号分开)每一个数字都是有符号32位整数, 当然, 行数和列数都是正整数
将上述题目的各个结果转换成图形界面显示。
3、结对开发要求:
两人结对完成编程任务。一人主要负责程序分析,代码编程。一人负责代码复审和代码测试计划。
发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。
二、设计思路
起初我和小伙伴一看到题就想到了这个想法,先比较数组中单个元素的最大值,之后,再比较行相邻两个数相加的最大值,再比较列相邻两个数相加的最大值,即以第一行,第一列元素为中心,逐渐向整个矩阵扩展。我相信很多同学都会有和我们一样的想法。最后,比较各个情况最大值,得出最终结果。但是呢,后来老师又叫了两个同学为我们讲解,我们显然似懂非懂,没有理解透,所以还是坚持了我们最初的想法,虽然代码不够简洁,但是我们还是会改进的。
三、代码
#include<iostream.h> int max[6]={0};//存储最大值 int b[6]={1,1,1,1,1,1};//存储最大值的行坐标 int c[6]={1,1,1,1,1,1};//存储最大值的列坐标 int a[10][10];//存储文件中的数据 int line; int row; int main() { int i,j; int line=2; int row=3; void biggest(); cout<<"请输入数组元素:(两行三列)"<<endl; for(i=0;i<line;i++) { for(j=0;j<row;j++) { cin>>a[i][j]; } } cout<<"数组元素为:"<<endl; for(i=0;i<line;i++) { for(j=0;j<row;j++) { cout<<a[i][j]<<"\t"; } cout<<endl; } biggest(); return 0; } void biggest()//算出最大值 { int i,j; int k=0; int Max; max[0]=a[0][0]; for(i=1;i<line;i++) { for(j=0;j<row;j++) { if(max[0]<a[i][j]) { max[0]=a[i][j]; b[0]=i+1; c[0]=j+1; } } } max[1]=a[0][0]+a[0][1]; for(i=0;i<line;i++) { for(j=0;j+1<row;j++) { if(max[1]<(a[i][j]+a[i][j+1])) { max[1]=a[i][j]+a[i][j+1]; b[1]=i+1; c[1]=j+1; } } } max[2]=a[0][0]+a[1][0]; for(j=0;j<row;j++) { for(i=0;i+1<line;i++) { if(max[2]<(a[i][j]+a[i+1][j])) { max[2]=a[i][j]+a[i+1][j]; b[2]=i+1; c[2]=j+1; } } } max[3]=a[0][0]+a[0][1]+a[0][2]; for(i=0;i<line;i++) { for(j=0;j+2<row;j++) { if(max[3]<(a[i][j]+a[i][j+1]+a[i][j+2])) { max[3]=a[i][j]+a[i][j+1]+a[i][j+2]; b[3]=i+1; c[3]=j+1; } } } max[4]=a[0][0]+a[0][1]+a[1][0]+a[1][1]; for(i=0;i+1<line;i++) { for(j=0;j+1<row;j++) { if(max[4]<(a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1])) { max[4]=a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1]; b[4]=i+1; c[4]=i+1; } } } max[5]=a[0][0]+a[0][1]+a[0][2]+a[1][0]+a[1][1]+a[1][2]; b[5]=1; c[5]=1; Max=max[0]; for(i=0;i<6;i++) { if(Max<max[i]) { Max=max[i]; k=i; } } cout<<"最大值为"<<Max<<endl; }
四、截图
五、心得体会
古人言,车到山前必有路啊,柳暗花明又一村啊,我觉得真的是对的,从前编程序不会编是因为从来没有仔细认真的思考然后动手去编。
现在不同了,每周都有了事情去干,感觉生活的很有价值,因为所有的努力都可以在程序上得到见证,不再像以前一样没事就看韩剧了。
结对开发呢,乍一听非常的高大上,但是实际上却很有人情味的一种开发方式,这是和小伙伴的第二次合作啦,过程呢,当然是两个人一起
同甘共苦啦,再没有人比小伙伴更能感同身受,这让我有一种路上有人相伴的感觉,让晦涩的编程之路不是那么的黑暗寂寞,就像一米阳光。
在本次开发中,代码部分是我敲的,最原始的思路是我俩一起很有默契的想得,中间的过程还是她想得比较周到,我只是有个大概的思路,平时我
会比较马虎,她就很严谨,这就像化学反应一样酸碱中和,变成有用的平和的水。
题目我俩都觉得比较难,但是经过几天的编与想,还是弄出结果来了,很开心,有图有真相。