结对初体验--找出和最大的字数组

结队人员 信1201-1班 曹美娜 袁亚姣

一、题目要求与结对开发要求

1、题目:
     返回一个整数数组中最大子数组的和。
2、要求:
    输入一个整形数组,数组里有正数也有负数。
    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
    求所有子数组的和的最大值。要求时间复杂度为O(n)。 
3、结对开发要求 
    两人结对完成编程任务。
    一人主要负责程序分析,代码编程。
    一人负责代码复审和代码测试计划。
   发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。
二、程序设计思想
  该程序的主要问题是如何找到所有的子数组并求和,我们采用的方法是依次找出包含数组中第i个元素的所有连续的子数组,求出每次的最大值保存在另外一个数组中,最后求出该数组中的最大值,图解步骤如下:
 用户输入数组:(a1,a2,a3,a4)
包含第一个元素的所有子数组集合{(a1),(a1,a2),(a1,a2,a3),(a1,a2,a3,a4)} 
包含第二个元素的所有子数组集合{(a2),(a2,a3),(a2,a3,a4)}
包含第三个元素的所有子数组集合{(a3),(a3,a4)}
包含第四个元素的所有子数组集合{(a4)}
依次求出以上集合各数组元素和的中最大值
三、程序源代码
 1  //程序开发者:曹美娜、袁亚姣
 2  //程序开发时间:2015/3/18
 3   
 4  #include "stdio.h"
 5 #define N 1000 
 6 int compare( int arry[],int length)
 7 {
 8     int max[N],max1;
 9     for(int j=0;j<length;j++)
10     {
11         int sum=0;
12         max1=-12345;
13         for(int i=j;i<length;i++)
14         {
15             sum=sum+arry[i];
16             if(sum>=max1)
17                 max1=sum;
18         }
19         max[j]=max1;
20         printf("包含数组中第%d个数的所有子数组中和最大的值为:%d\n",j,max[j]);
21     }
22     int fmax=max[0];
23     for(int i=0;i<length;i++)
24     {    
25         if(max[i]>fmax)
26             fmax=max[i];
27     }
28     printf("所有子数组的和的最大值为:%d\n",fmax);
29     return 0;
30 }
31 int main(int argc, char* argv[])
32 {
33     int arry[N];
34     int length;
35     printf("请输入要比较整数的个数:");
36     scanf("%d",&length);
37     printf("请输入整数");
38     for(int i=0;i<length;i++)
39     {
40         scanf("%d",&arry[i]);
41     }
42     compare(arry,length);
43     return 0;
44 }

四、运行结果

五、心得体会

在这次合作过程中,我们充分体会到了结对的快乐。之前我们自己做可能有许多不会的地方,两个人在一起取长补短,一起商量。既提高了代码的质量,又提高了我们自己的水平;

我们会比一个人想的更加全面;当然也可能有反面作用,比如一个人不做了,然后都不做了。。不过我们只要正确的对待自己的小伙伴,我相信我们都可以在团队合作中得到提高。

最后pop工作合照一张

posted @ 2015-03-19 21:39  YTester  阅读(159)  评论(0编辑  收藏  举报