zoukankan      html  css  js  c++  java
  • 结对开发3

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

    要求:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。

    数组中有1000个元素。

    结对编程要求:两人结对完成编程任务。

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

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

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

    一、设计思路

             首先,我们还是先进行分工,继续由我来编写程序代码,由张科同学负责代码复审和代码测试。

             解决思路是,我们先比较长度子数组中的最大值,存入一个数组,再比较这个数组中的各个值得大小,最终获得最大值。

             对于超过int32最大表示范围,我们的解决方案是只要数组中有足够多的负数,就不会产生如此大的值。

    二、源代码

    #include<iostream.h>
    #include<stdlib.h>
    int a[1000];
    int Sum(int num,int count)
    {
       int plus=0;
       int i=num;
       while(count!=0)
       {
          plus=plus+a[num];
          num++;
          count--;
       }
       return plus;
    }
    int main()
    {
       int i,j,k;
       int Max;
       int max[1000]={0};
       int Count=1000;
       for(i=0;i<1000;i++)
       {
          a[i]=10000-rand();
       }
       for(i=0;i<1000;i++)
       {
          cout<<a[i]<<' ';
          if((i+1)%5==0)
             cout<<endl;
       }
       for(i=0;i<1000;i++)
       {
          for(j=0;j<i+1;j++)
          {
             max[i]=max[i]+a[j];
          }
       }
       Max=max[0];
       for(i=0;i<1000;i++)
       {
          for(j=0;j<Count;j++)
          {
             if(max[i]<Sum(j,i+1))
              max[i]=Sum(j,i+1);
          }
          Count--;
       }
       for(i=1;i<1000;i++)
       {  
          if(Max<max[i])
           Max=max[i];
       }
       cout<<"最大值为:"<<Max<<endl;
       return 0;
    }

    三、运行结果

    四、工作体会

             通过这次结对开发,我们初次接触处理如此大的数据量,一个人编程的脑力明显不够,这时我们可以把程序分成不同的模块,一人解决一个模块,要比一个人解决所有程序,在时间上提速很多。

    五、工作照

    五、工作照

  • 相关阅读:
    数论分块与整除相
    P3254——DP&&入门
    P3384——树链剖分&&模板
    树链剖分模板
    P4145——线段树点修改&&模板题
    P1198最大数——线段树点修改&&模板题
    线段树(四)——两个标记(add和set)
    epoll 知识总结
    C++中的mutable关键字
    [LeetCode] Max Points on a Line
  • 原文地址:https://www.cnblogs.com/benboerba/p/4367087.html
Copyright © 2011-2022 走看看