求数组中最大子数组的和(一维)

结对开发:林彦汝、张金

 

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

要求:

1、输入一个整型数组,数组里有正数也有负数;

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

3、求素有子数组的和的最大值。

 

  本节课是学习结对开发,故先分配了任务:我主要负责程序分析,代码编程;张金负责代码复审,代码测试计划。

 

思路:我和搭档张金一起分析题目,统一解决方法。首先定义2个数组(假设有n个数),关系如下:

max[0]为{arr[0]、arr[0]+arr[1]、...、arr[0]+arr[1]+...+arr[n-1]+arr[n]}中的最大值;

max[1]为{arr[1]、arr[1]+arr[2]、...、arr[1]+arr[2]+...+arr[n-1]+arr[n]}中的最大值;

......

max[n-1]为{arr[n-1]、arr[n-1]+arr[n]}中的最大值;

max[n]为{arr[n]}中的最大值(即max[n]=arr[n])。

再比较max数组,从中找到最大值。

 

源代码:

//数组长度为5。

 1 #include<iostream.h>
 2 
 3 int main()
 4 
 5 {
 6 
 7     int arr[5];
 8 
 9     int i,j;
10 
11     int max[5];
12 
13     cout<<"input array (five numbers):"<<endl;
14 
15     for(i=0;i<5;i++)
16 
17     {
18 
19         cin>>arr[i];
20 
21     }
22 
23     for(i=0;i<5;i++)
24 
25     {
26 
27         max[i]=arr[i];
28 
29     }
30 
31     for(j=0;j<4;j++)
32 
33     {
34 
35         for(i=j+1;i<5;i++)
36 
37         {
38 
39             arr[j]=arr[j]+arr[i];
40 
41             if(max[j]<arr[j])
42 
43             {
44 
45             max[j]=arr[j];
46 
47             }
48 
49         }
50 
51     }
52 
53     for(i=0;i<5;i++)
54 
55     {
56 
57         if(max[0]<max[i])
58 
59             max[0]=max[i];
60 
61     }
62 
63     cout<<"ADDmax="<<max[0];
64 
65     return 0;
66 
67 }

 

运行结果:

 

总结体会:

  这次结对开发进行的很顺利,我们在课间就完成了作业,在过程中收获了很多。首先是在讨论思路时,需要两个人的大致方向是一致的,虽然这次做的程序是比较简单的,但在做大项目时,有很多模块时,这点应该就很重要;其次是在实现功能上,虽然我是主要负责代码编程,但在动手敲键盘之前我们也讨论了实际的解决方法,用什么结构、怎么嵌套...几分钟下来就发现每个人想法也还是不同的,而且每个人对语言的掌握程度、注意和侧重的细节也不同,互相交流可以不断提升编程技能,不断开拓;最后是在编程过程,我们都还比较粗心,两个人可以互相提醒和监督。

   结对开发是以后工作后必不可少的,现在不仅要锻炼自身的编程能力,同时更要注重培养团队合作的能力。

 

原文地址:https://www.cnblogs.com/mumulucky/p/4345114.html