程序开发之最大子数组

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

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 }

四、实验结果

五 实验总结

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

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

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

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

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

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

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

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

时间: 2024-10-13 00:03:44

程序开发之最大子数组的相关文章

结对开发五--最大子数组的和(大数溢出)

一.设计思路 根据上一个实验,再让他自动生成1000个随机long型数.并且自己埋入炸弹,看是否有异常出错. 二.实验代码 1 import java.util.*; 2 class SuperMax3 3 { 4 public static void main(String[] args) 5 { 6 long[] list = new long[1000];//输入数组是必须先定义数组,否则出错! 7 long[] arr1 = new long[1000];//输入数组是必须先定义数组,否

软件工程结对开发——一维最大子数组求和溢出问题

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 将数组第一个和第二个数置为2的63次方,观察结果是否溢出. 三.源代码 1 package com.java.lianxi; 2 3 import java.util.Scanner; 4

微信小程序开发之拼接json数组字符串

直接上代码   : var imageitem;    var imageitemstring='';    for(var i=0;i< that.data.fbimages.length;i++)    {      imageitem='{"fileUrl":"'+ that.data.fbimages[i] +'"}';      if(i<that.data.fbimages.length-1)      {imageitemstring +=

结对开发——返回整数数组最大子数组和2

返回整数数组最大子数组和2 为了实现“敏捷开发”的目的,老师让我们采取“迭代”的方法进行项目的开发,这不,对于周一的求最大子数组和又有了新的要求,如下: 1.延续上次的要求,这里不再赘余… 2.如果数组A[0]……A[j-1]首尾相连,允许A[i-1],……A[n-1],A[0]……A[j-1]之和最大: 3.同时返回最大子数组的位置: 4.要求程序必须能处理1000 个元素,且每个元素是int32 类型的. 一.实验设计思路 首先实现的是数组首尾相连,先存入数组,再将原数组反向存储形成环形数组

《团队开发项目之三二维数组的最大子数组之和》

设计思想:按列或按行的次序依次进行计算每个以列或行的次序为基准的每种情况下的每个子矩阵的和,然后再依次进行比较每个子矩阵的和,取出最大的一个即是最大字数组之和: 源代码: //二维数组的最大子数组之和 //李敏,Apr 8th #include<iostream> #include<time.h> using namespace std; void main() { int m,n,a[100][100],k,t,c,i,j,z; int maxsum,sum[100],max=0

结对开发(求二维首尾相接数组的最大子数组和)

一.题目要求 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和 一.设计思想 求环形二维数组最大子数组的和,可以转化为求一维数组最大子数组的和 我们有一个最初的二维数组a[n][n]找它的 最大子数组之和 1.我们先建立一个新的二维数组b[n][2*n-1], 2,这个新的二维数组就是将初始的二

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

一.题目及要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 二.设计思路 程序分成两个部分: (1):找到数组中所有可能的子数组的和: 先从数组中第一个数开始算起,一直求到与它连续的的所有数的和存入数组son,然后从第二个数开始算起,求与它连续的数的和存入数组,以此类推,直至计算到最后一个数.有n个数据的数组能产生的子数组个数为n

结对开发——一维数组最大子数组判断溢出

一 题目 求一维数组最大子数组和 要求:1000个数以上,整数 二.设计思路 最大子数组很好找到,但是子数组和的溢出问题很难解决. 经过不断的思考,我得出了结论: 溢出是程程序设计者设计时的不足所带来的错误.所以设计者要在编码时便高度警惕,预防溢出的发生,这才是最本质的解决问题的方法.就本题而言,我们设置了元素最大个数,以及其它输入要求,尽量避免溢出的发生.1000个数相加可以实现,但非要取1000个最大的数相加,那样的计算没有意义,不会在我们的生活学习中出现,这属于科研问题,交给大神们来解决吧

二维数组最大子数组(结对开发)

1.题目要求 题目:返回一个二维整数数组中最大联通子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 求所有子数组的和的最大值. 2.设计思想: 对n*m的二维数组进行分解,分解为n个一维数组,再先求这n个一维数组的最大子数组和,并记下每行最大一维子数组的下标如2-5,这是就会分两种情况第一种是行之间的最大子数组是相连的,如第一行是2-5,第二行是3-6,这是直接相加就行.第二种是不相连的如第一行是2-5,第二行是6-7,这时候就把每行的最大子数组看成一个整体,再使每个最大数组块