软件工程结队开发——输出一个数组中最大子数组的和

一、题目及要求

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

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

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

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

二、设计思路

程序分成两个部分:

  • (1):找到数组中所有可能的子数组的和;

  先从数组中第一个数开始算起,一直求到与它连续的的所有数的和存入数组son,然后从第二个数开始算起,求与它连续的数的和存入数组,以此类推,直至计算到最后一个数。有n个数据的数组能产生的子数组个数为n*(n+1)/2

  • (2)每次所求的和存入数组时,按照上一次所存数据的最后一个数据加一村入新数据
  • (3)比较数组son[]中的值,然后输出最大的数即为所求

三、源代码

 

 1 // ketang4.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include "iostream"
 6 using namespace std;
 7 
 8 
 9 /*确定求和存储数组元素*/
10 void Son(int father[],int son[],int length)
11 {
12      int add;                                                    //定义求和变量
13      int count=0;                                                //统计数组元素个数
14      for(int i=0;i<length;i++)
15      {
16          add=0;
17          for(int j=0;j<length-i;j++)
18          {
19              add=add+father[i+j];
20              son[count+j]=add;
21          }
22          count=count+length-i;
23      }
24 }
25 
26 /*找到最大的子数组的和*/
27 void Max(int son[],int num)
28 {
29     int max=son[0];
30     for(int i=0;i<num;i++)
31     {
32         if(max<son[i])
33         {
34             max=son[i];
35         }
36     }
37     cout<<max<<endl;
38 }
39 
40 /*主函数*/
41 int main()
42 {
43     int length,num;                                                //定义原始数组长度length,求和存储数组长度num
44     cout<<"请输入数组元素个数:";
45     cin>>length;
46     int* father=new int[length];                                //定义原始数组
47     num=length*(length+1)/2;
48     int* son=new int[num];                                        //定义求和存储数组
49     cout<<"请输入原始数组数据:"<<endl;
50     for(int i=0;i<length;i++)
51     {
52         cin>>father[i];
53     }
54     Son(father,son,length);
55     cout<<"最大子数组的和为:";
56     Max(son,num);
57     return 0;
58 }

四、实验结果

技术分享技术分享

技术分享

五、实验分析

  这可以算的上是第一次结队开发了吧,以前真的没有几个人在一块讨论实现问题,虽然以前也有过分组的实验之类的课程作业,但是,最多刚开始讨论一下,之后不了了之了,所有东西都是自己在做,自己想到什么是什么,不会顾及别人的想法。在我和梁世豪一起做这道题的时候,对这道题有不同的想法,但是经过思考,决定选取上面这种解法,虽然没有实现复杂度为o(n),但还是达到了两个人预期的结果。虽然这个程序很短,但是两个人在完成过程中,有交流和分析,可以知道对方的想法思路,可以拓宽自己的思维,取得1+1>2的效果。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。