码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-03-19 00:37:42      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

一、题目及要求

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

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

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

          求所有子数组的和的最大值。要求时间复杂度为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的效果。

 

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

标签:

原文地址:http://www.cnblogs.com/zhshto/p/4349069.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!