zoukankan      html  css  js  c++  java
  • 体验结对开发的乐趣(1)--(一维数组求和最大的子数组)

    结对人员:信1201-1班韩雪东、信1201-2班高扬

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

    1、题目:
         返回一个整数数组中最大子数组的和。
    2、要求:
        输入一个整形数组,数组里有正数也有负数。
        数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
        求所有子数组的和的最大值。要求时间复杂度为O(n)。 
    3、结对开发要求 
        两人结对完成编程任务。
        一人主要负责程序分析,代码编程。
        一人负责代码复审和代码测试计划。
       发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。(截止到周四3月19日24:00)
       

    二、程序设计思想

       遇到的问题是怎么求数组的所有子数组,我们一开始的思想是划范围,子数组长度为1的数组,为2的数组,为3的数组········,还得含有相邻元素,这个一开始想的是一个一个的划分,然后如果编写程序的话就不好实现,之后我们的领航员想到了一个方法,,比如数组为[1,2,3,4,-6],那么我们首先求与第一个元素相邻的包含第一个元素在内的所有子数组的和,求得的结果放在一个缓存数组里,缓存数组结果是[1,3,6,10,4],然后求得缓存数组里最大的值,为10,然后在求与第二个元素有关的、第三个、第四个·········,这样依次得到5个最大值,5个最大值在比较取最大值,输出最后的结果。

    三、源代码

     1 // ceshi.cpp : Defines the entry point for the console application.
     2 //作者:韩雪东,高扬
     3 //时间:2015/3/17
     4 
     5 #include "stdafx.h"
     6 #include "stdio.h"
     7 #include "stdlib.h"
     8 #include "time.h"
     9 
    10 int shuchu(int m[],int szcdx,int xhy)//m[]表示要测试的数组,szchx表示数组长度,xhy表示循环条件
    11 {
    12     int t,p;
    13     int max,sum;
    14     //缓存数组赋值
    15     int c[100];
    16     int v[100];
    17     for(t=szcdx-xhy-1;t<szcdx;t++)
    18     {
    19         c[t-szcdx+xhy+1]=m[t];
    20     }
    21     //循环
    22     for(t=xhy;t>=0;t--)
    23     {
    24         sum=0;
    25         for(p=0;p<=t;p++)
    26         {
    27             sum=sum+c[p];
    28         }
    29         v[t]=sum;
    30     }
    31     //循环输出最大值
    32     max=v[0];
    33     for(t=0;t<xhy+1;t++)
    34     {
    35         if(max<=v[t])
    36         {
    37             max=v[t];
    38         }
    39         printf("%d  ",v[t]);
    40     }
    41     
    42     return max;
    43 }
    44 
    45 int main(int argc, char* argv[])
    46 {
    47     int a[5]={100,3,-20,-10,-12};
    48     int maxx[100];
    49     
    50     for(int i=4;i>=0;i--)
    51     {
    52         printf("包含数组中第%d个数在内的所有相邻子数组的和:",5-i);
    53         maxx[i]=shuchu(a,5,i);        
    54         printf("
    %d
    
    ",maxx[i]);
    55     }
    56     int maxxx=maxx[0];
    57     for(i=0;i<100;i++)
    58     {
    59         if(maxxx<=maxx[i])
    60         {
    61             maxxx=maxx[i];
    62         }
    63     }
    64     printf("
    
    该数组的所有子数组的和的最大值:%d
    
    ",maxxx);
    65     return 0;
    66 }

    四、运行结果截图

    五、用数据测试程序

    1、测试数据:边界

    2、测试数据:全是正整数

    3、测试数据:全部是负数

    4、测试数据:单个最大

    全部正确

    六、结对开发心得体会

         1、随机的在课上结组的,我们一开始没有分工,就是两个人说自己关于问题的想法,然后我们商量出比较适合的想法,两个人的分工一开始并不明确,慢慢的趋向于明朗,最后的定性就是我是驾驶员,他是领航员。

         2、搭档提供了本程序的大部分设计思想,我提供了程序的整体框架,今晚我们在一起对代码进行了优化,尤其是程序的可扩充性,还有就是在设计函数时候的逻辑思想,特别的混乱,但是领航员理得挺清楚的,最后终于调试成功了。

         3、相对于之前的我一个人开发来说,还是不如现在的结对开发,在生产效率上就不如结对开发,自己设计从设计思想开始就得靠自己,到最后的完成,一个人可能要花上半天的时间,可是结对的话可能两个小时就够了。

         4、在商量的过程中我心里产生了一丝丝的焦虑,怕商量的时候遇到意见不合,还有中间想只是体会一下结对开发,项目完成完不成没有多大意义了,但是这个想法还是被我压住了,既然要结对开发,就做彻底一点,完成这个项目吧,在坚持一会后程序运行成功了,我都有想给伙伴一个拥抱的冲动了,但是介于在教室里还是两个男性,我就大小这个念想了,不过真的在程序运行成功的时候特别的高兴,感觉成就杠杠的,总算没有白费心思,以后有结对开发的时候一定会坚持尽心尽力。

    七、开发过程截图

  • 相关阅读:
    无线鼠标和无线键盘能不能唤醒睡眠中的电脑的解决方案
    教你如何设置同时上内外网(单网卡或双网卡)
    Oracle_字符集问题(数据库与客户端字符集关联关系)
    关于破解移动宽带光猫 型号: GS3101 超级管理员密码
    Oracle 低版本客户端连接 18c 报ORA-28040 和 ORA-01017 错误的解决方法
    sql语句分组统计出年月日下数据记录数目
    Servlet文件上传
    ActiveMq+zookeeper+levelDB集群整合配置
    mongodb 级联操作查询时,关联条件
    maven插件地址博客园
  • 原文地址:https://www.cnblogs.com/hanshidiguo/p/4345716.html
Copyright © 2011-2022 走看看