• 二人合作的结对开发


    题目:返回一个整数数组中最大子数组的和。

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

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

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

    结对编程要求: 两人结对完成编程任务。 一人主要负责程序分析,代码编程。

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

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

    结对开发过程:

         在得知题目之后,我和我的搭档@天使LR恶魔开始了认真的讨论,最终思路是定义两个整数b和sum。在一串数组中正数和负数互相穿插,正数被负数隔开。x、y表示个数大于或等于零的数组,x表示正数数组,y表示负数数组。(x1,y1,x2,y2,…)是输入的n个元素的数组。b1=sum(x1)>0,sum=b;若b2=sum(x1)+sum(y1)>0,b3=sum(x1)+sum(y1)+sum(x2),b3可能大于b1,于是sum=b3,;可能等于b1,sum不变即可;可能小于b1,sum不变…。以此类推,我们做出了如下的代码。

    程序代码:

     1 #include <iostream.h>  
     2   
     3 int maxSum(int* a, int n)  
     4 {  
     5     int sum=a[0];              //  将数组第一个数先赋给总和sum
     6 
     7     int b=0;
     8 
     9     for(int i=0; i<n; i++)
    10     {
    11         
    12         if(b<0)
    13             b=a[i];
    14         else
    15             b+=a[i];
    16         if(sum<b)
    17             sum=b;
    18     }
    19     return sum;
    20 }
    21 
    22 int main()
    23 {   int n;
    24     cout<<"请输入数组的元素个数: "<<endl;
    25     cin>>n;
    26     cout<<"请输入数组的元素: "<<endl;
    27     int *a=new int[n];
    28     for(int i=0;i<n;i++)
    29     {cin>>a[i];}                         //输入n个元素的数组
    30 
    31     cout<<maxSum(a,8)<<endl;             //调用函数maxSum
    32     return 0;
    33 }

    程序结果及测试:

    1、n=5时,全为负数,第一个最大:

    2、n=5时,全为负数,第五个最大:

    3、n=5时,全为正数:

    4、n=5时,正数、负数无序:

    结对开发感想:

        在此次的编程之中,让我充分的了解了结对开发程序所带来的好处。首先,结对开发不是小组开发,没有“滥竽充数”,比一个人编程更有效果,他能让两个人之间更加亲密;其次,它能让我们两个人之间互相学习互相促进,能相互学习对方的优点长处;最后我要说的是我们俩智力有限,代码仍能继续改进。

    附美照一张:

  • 相关阅读:
    HDU 4757 Tree 可持久化字典树 trie
    BZOJ 4198: [Noi2015]荷马史诗 哈夫曼树 k叉哈夫曼树
    BZOJ 3253 Fence Repair 哈夫曼树 水题
    BZOJ 3572: [Hnoi2014]世界树 虚树 树形dp
    2-SAT的一些题目
    二分图相关定理 最小点覆盖 最小路径覆盖 最大独立集 最小覆盖集
    POJ 1469 COURSES 二分图最大匹配 二分图
    快速排序
    排序算法:希尔排序
    霍夫曼编码实现
  • 原文地址:https://www.cnblogs.com/cainiao1hao/p/4348286.html
Copyright © 2020-2023  润新知