合作项目2

结组成员:信1201-1柴珏辉 信1201-2邓锐

一、要求

1、题目:

     返回一个二维数组中最大子数组的和。

2、要求:

程序要使用的数组放在一个叫 input.txt 的文件中,  文件格式是:

数组的行数,

数组的列数,

每一行的元素,  (用逗号分开)

每一个数字都是有符号32位整数, 当然, 行数和列数都是正整数

将上述题目的各个结果转换成图形界面显示。

3、结对开发要求: 

    两人结对完成编程任务。

    一人主要负责程序分析,代码编程。

    一人负责代码复审和代码测试计划。

   发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。   

二、设计思路

使用枚举法,遍历所有数据((x,y)代表第x行第y列的数),从(1,1)列开始,到(1,2)时(1,1)+(1,2);到(2,1)时(1,1)+(2,1);到(2,2)时(1,1)+(1,2)+(2,1)+(2,2)……以此类推,计算出这样组成的所有子数组的和,求出其中的最大值及其对应的子数组。

三、程序代码

 1 #include<iostream.h>
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<time.h>
 5 #define N 30   //行数
 6 #define M 50   //列数
 7 void qiuhe(int a[N][M],int &he,int i,int j,int k,int l) //求两个顶点数所确定的矩阵之和,[i,j]为第一个数的下标,[k,l]为第二个数的下标
 8 {  9     int c,b; 10     he=0; 11     for(c=i;c<=k;c++) 12  { 13         for(b=j;b<=l;b++) 14  { 15             he=he+a[c][b]; 16  } 17  } 18 } 19 void display(int a[N][M],int i,int j,int k,int l)  //输出两个顶点数所确定的矩阵,[i,j]为第一个数的下标,[k,l]为第二个数的下标
20 { 21     int b,c; 22     for(c=i;c<=k;c++) 23  { 24         for(b=j;b<=l;b++) 25  { 26             cout<<a[c][b]<<" "; 27  } 28         cout<<endl; 29  } 30 } 31  void main() 32  { 33      int a[N][M]; 34  srand((unsigned)time(NULL)); 35      int i,j,k,l,hang1=0,hang2=0,lie1=0,lie2=0,max=a[0][0],he=0; 36      for(i=0;i<N;i++)         //对二维数组中的数随机生成
37  { 38          for(j=0;j<M;j++) 39  { 40              a[i][j]=rand()%20-10; 41  } 42  } 43      for(i=0;i<N;i++) 44  { 45          for(j=0;j<M;j++)           //前两个循环遍历第一个顶点数
46  { 47              for(k=i;k<N;k++) 48  { 49                  for(l=j;l<M;l++)    //后两个循环遍历第二个顶点数
50  { 51  qiuhe(a,he,i,j,k,l); 52                      if(he>max) 53  { 54                          max=he; 55                          hang1=i; 56                          hang2=k; 57                          lie1=j; 58                          lie2=l; 59  } 60  } 61  } 62  } 63  } 64      cout<<"原数组:"<<endl; 65      display(a,0,0,N-1,M-1); 66      cout<<"最大子数组(两个顶点坐标("<<hang1<<","<<lie1<<""<<""<<hang2<<","<<lie2<<"))"<<endl; 67  display(a,hang1,lie1,hang2,lie2); 68      cout<<"和为:"<<max<<endl; 69  }

 

截图:

合作项目2_第1张图片

四、测试

将代码随机产生数组内容部分去掉,改为固定数组,通过修改其中数据进行测试。

1.测试数据

0,0,0,0,0

0,0,0,0,0

0,0,0,0,0

合作项目2_第2张图片

2. 测试数据

1,2,3,4,5

6,7,8,9,10

11,12,13,14,15

合作项目2_第3张图片

3.测试数据

-1,-2,-3,-4,-5

-6,-7,-8,-9,-10

-11,-12,-13,-14,-15

合作项目2_第4张图片

五、心得体会

  这次题目比较难,一开始我们两个人都没有太好的想法,我们首先交流的方法实现起来比较困难。我们一直想找到简便的算法,但没有实现。我们决定先搁下一两天再讨论。中间我们产生了不同的意见,两个人交换想法,选取最好的综合起来。最后我们采用枚举的方法,遍历所有可能。这是比较耗时比较笨的方法,但还算全面,只是数据量太大时耗费时间。我编写完代码部分,他来复审测试,指出错误的地方,一起修改。这次合作我们一致认为增加了默契度。

  通过这次合作我知道了一个团队中不仅要有个人的独特见解,也要有相互之间的融合体谅。

合作项目2_第5张图片

你可能感兴趣的:(项目)