程序开发之最大子数组

一、题目:返回一个整数数组中最大子数组的和
二、实验思路:

1.定义一个整型数组num[n],随机生成数组中元素的值,
2.定义一个二维数组arr[n][2],arr[i][0]不包含num[i]子数组之和最大值,arr[i][1]包含num[i]子数组之和最大值
3.随机生成数组num[n]
4.采用循环递归的方式,调用max函数计算arr[i][0],arr[i][1],计算包含数组元素本身和不包含本身的前子数组最大和的情况,将他们之中的最大值赋给Max

三源代码

复制代码
复制代码
 1 #include<iostream>
 2 #include<time.h>
 3 #define N 100                            //设定数组的最大个数为100
 4 using namespace std;
 5 int main()
 6 {    
 7     srand((unsigned)time(NULL));         
 8     int num[N],arr[N][2];               //num[]用于存放数组,arr[i][0]是指不包括num[i]之前最大子数组的和,arr[i][1]是指包括num[i]的最大子数组的和
 9     int Num,Max;                        //Num是指数组的长度,Max用来存放最大和
10     cout<<"请输入数组的长度:"<<endl;
11     cin>>Num;
12     cout<<"这个数组为:"<<endl;
13     for(int i=0;i<Num;i++)              //随机生成一个数组
14     {
15         num[i]=-20+rand()%50;
16     }
17     for(int i=0;i<Num;i++)
18     {
19         cout<<num[i]<<" ";
20     }
21     cout<<endl;
22     cout<<"请输入这个数组的最大子数组和为:"<<endl;
23     arr[1][0]=0;
24     arr[1][1]=num[1];                          //初始化arr[i][0],arr[i][1]
25     for(int i=0;i<Num;i++)                     //采用递归的方式来求子数组的最大和
26     {
27         arr[i][0]=max(arr[i-1][0],arr[i-1][1]);             //调用max函数计算不包含num[i]子数组之和最大值
28         arr[i][1]=max(arr[i-1][1]+num[i],num[i]);           //调用max函数计算包含num[i]子数组之和最大值
29         Max=max(arr[i][0],arr[i][1]);
30     }
31     cout<<Max<<endl;
32 }

 

复制代码
 
复制代码

四、实验结果

五 实验总结

此次实验主要目的是锻炼我们结对编程的能力,虽说此次代码很容易,但是也出现了不少的问题。

第一,关于手脑协调的问题,写代码的一方,比如我,脑袋光顾着打代码了也没往下深入的思考,然后小伙伴就把

以下的解题思路想出来了,让我一直忙着敲,思路可能有点不适应,手和脑不太协调,使得编写代码过程中代码错误小,

但是思维有些停滞,以后还需加强练习。

第二,关于交流的问题,两人可能思路有快有慢,有前有后,就难免会发生意见的分歧,这时,我们俩都做的认真听取对方的

想法和建议,从而更快的解决问题,达到了双赢。

第三,关于效率的问题,我是个比较懒得人,有了小伙伴的督促我更加早的完成了这个问题,没有拖到最后,我觉得两个人一起挺好,互相监督

同甘共苦,荣辱与共很棒。

我的结对伙伴:鲁鑫 http://home.cnblogs.com/u/luxin123/

posted on 2016-03-26 17:46  张瑶  阅读(227)  评论(1编辑  收藏  举报

导航