程序开发之结对合作2

一、题目

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

2、要求:

输入一个整形数组,数组里有正数也有负数。

数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为O(n)。

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

数组的行数,数组的列数,每一行的元素,  (用逗号分开)每一个数字都是有符号32位整数, 当然, 行数和列数都是正整数

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

3、结对开发要求: 

    两人结对完成编程任务。一人主要负责程序分析,代码编程。一人负责代码复审和代码测试计划。

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

二、设计思路
比较二维数组中单个元素的最大值;
再比较行相邻两个数相加的最大值;
再比较列相邻两个数相加的最大值;
即以第一行,第一列元素为中心,逐渐向整个矩阵扩展。
最后,比较各个情况最大值,得出最终结果。

三、源代码

  1 #include<iostream.h>
  2 int max[6]={0};//存储最大值
  3 int b[6]={1,1,1,1,1,1};//存储最大值的行坐标
  4 int c[6]={1,1,1,1,1,1};//存储最大值的列坐标
  5 int a[10][10];//存储文件中的数据
  6 int line;     
  7 int row; 
  8 int main()
  9 {
 10     int i,j;
 11     int line=2;
 12     int row=3;
 13     void biggest();
 14     cout<<"请输入数组元素:(两行三列)"<<endl;
 15     for(i=0;i<line;i++)
 16     {
 17         for(j=0;j<row;j++)
 18         {
 19             cin>>a[i][j];
 20         }
 21     }
 22     cout<<"数组元素为:"<<endl;
 23     for(i=0;i<line;i++)
 24     {
 25         for(j=0;j<row;j++)
 26         {
 27             cout<<a[i][j]<<"\t";
 28         }
 29         cout<<endl;
 30     }
 31     biggest();
 32     return 0;
 33 }     
 34 void biggest()//算出最大值
 35 {
 36     int i,j;
 37     int k=0;
 38     int Max;
 39     max[0]=a[0][0];
 40     for(i=1;i<line;i++)
 41     {
 42         for(j=0;j<row;j++)
 43         {
 44             if(max[0]<a[i][j])
 45             {
 46                 max[0]=a[i][j];
 47                 b[0]=i+1;
 48                 c[0]=j+1;
 49             }
 50         }
 51     }
 52     max[1]=a[0][0]+a[0][1];
 53     for(i=0;i<line;i++)
 54     {
 55         for(j=0;j+1<row;j++)
 56         {
 57             if(max[1]<(a[i][j]+a[i][j+1]))
 58             {
 59                 max[1]=a[i][j]+a[i][j+1];
 60                 b[1]=i+1;
 61                 c[1]=j+1;
 62             }
 63         }
 64     }
 65     max[2]=a[0][0]+a[1][0];
 66     for(j=0;j<row;j++)
 67     {
 68         for(i=0;i+1<line;i++)
 69         {
 70             if(max[2]<(a[i][j]+a[i+1][j]))
 71             {
 72                 max[2]=a[i][j]+a[i+1][j];
 73                 b[2]=i+1;
 74                 c[2]=j+1;
 75             }
 76         }
 77     }
 78     max[3]=a[0][0]+a[0][1]+a[0][2];
 79     for(i=0;i<line;i++)
 80     {
 81         for(j=0;j+2<row;j++)
 82         {
 83             if(max[3]<(a[i][j]+a[i][j+1]+a[i][j+2]))
 84             {
 85                 max[3]=a[i][j]+a[i][j+1]+a[i][j+2];
 86                 b[3]=i+1;
 87                 c[3]=j+1;
 88             }
 89         }
 90     }
 91     max[4]=a[0][0]+a[0][1]+a[1][0]+a[1][1];
 92     for(i=0;i+1<line;i++)
 93     {
 94         for(j=0;j+1<row;j++)
 95         {
 96             if(max[4]<(a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1]))
 97             {
 98                 max[4]=a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1];
 99                 b[4]=i+1;
100                 c[4]=i+1;
101             }
102         }
103     }
104     max[5]=a[0][0]+a[0][1]+a[0][2]+a[1][0]+a[1][1]+a[1][2];
105     b[5]=1;
106     c[5]=1;
107     Max=max[0];
108     for(i=0;i<6;i++)
109     {
110         if(Max<max[i])
111         {
112             Max=max[i];
113             k=i;
114         }
115     }
116     cout<<"最大值为"<<Max<<endl;
117     
118 }

四、运行结果

五、心得体会

   

       我和同伴看到这道题目的时候,没有思路。后来听了别的同学关于这道题的想法后,才有了些许新想法。
感觉这道题目跟以往的相比,有难度。我和小伙伴,在我们力所能及的范围内做这道题。通过这道题目,感
觉自己在平时的练习中,有所欠缺,对于编程的能力还需要提高。在以后的练习中,应该多动手,争取可以
不断简化自己程序中的算法。当然,在我和同伴一起的努力下,我们完成了题目,自己也得到了锻炼。

(附图)

 

  

 

 

posted @ 2015-03-25 13:29  yuji-5656  阅读(223)  评论(1编辑  收藏  举报