返回一个随机数组中的子数组中的数相加最大的和(二)

设计思想:

  1. 随机生成数组(含有正数与负数)。
  2. 求所有子数组:按数组长度进行数组的划分(因为要求数组是连续的)。
  3. 计算:从第一个数开始做加法,若和大于第二个数,则继续加下一个数(若加上第三个数的和大于第三个数,则重复进行此操作;小于第三个数,则舍掉前面所有数,并继续就重复进行此操作);若小于第二个数,则舍掉第一个数。

实现代码:

#include <iostream>

#include<time.h> using namespace std;

int maxSum(int* a, int n)  {

int sum=0;

//其实要处理全是负数的情况,很简单,如稍后下面第3点所见,直接把这句改成:"int sum=a[0]"即可

//也可以不改,当全是负数的情况,直接返回0,也不见得不行。

int b=0;

for(int i=0; i<n; i++)     {

if(b<0)

b=a[i];

else

b+=a[i];

if(sum<b)

sum=b;

}

return sum;

}

int main()  {

int n=1000,k=0;

int *a=new int [n];

for( int i = 0 ; i < n ; i++)    {

a[i] = rand()%20 - 10 ;

}   for( int i = 0 ; i < n ; i++)    {

cout<<a[i]<<" ";

}

for( int i = 0 ; i < n ; i++)//产生的数组都为负数时的情况    {

if(a[i]<0)    {

k++;

}

}

if(n==k)  {

for( int i = 1 ; i < n ; i++)         {

k=a[0];

if(a[i]>k)        {

k=a[i];

}

}     c

out<<"最大和为:"<<k<<endl;

}

else  {

cout<<"最大和为:"<<maxSum(a,n)<<endl;

}

cout<<"请输入数组长度:"<<endl;  cin>>n;

cout<<"请输入数组元素:"<<endl;

for( int i = 0 ; i < n ; i++)    {

cin>>a[i] ;

}

cout<<endl;

for( int i = 0 ; i < n ; i++)//产生的数组都为负数时的情况    {

if(a[i]<0)    {

k++;

}

}

if(n==k)  {

for( int i = 1 ; i < n ; i++)         {

k=a[0];

if(a[i]>k)        {

k=a[i];

}

}

cout<<"最大和为:"<<k<<endl;

}

else  {

cout<<"最大和为:"<<maxSum(a,n)<<endl;

}

return 0;

}

结果截图:

实验总结:

总结:本次实验主要是在上次的基础上看看当输出的数组元素多的情况会有什么问题以及数组元素的值大的时候会出现的情况,从实际来看前者没出现问题,但在值大的时候会出现意外报错这说明程序不够完美。再就是本次实验是由两人结对完成,初步对配合有了些理解和感悟,两人间如何分配任务将会影响整个项目的进度,以及两个人都分配些什么任务应该是能让每个人发挥出特长,再就是时间的安排问题由于是配合肯定要为每个人划分时间按段时间的划分不合理也会导致一个人忙死一个人闲死,显然这是不合理的。

合作照:

时间: 2024-10-03 23:00:26

返回一个随机数组中的子数组中的数相加最大的和(二)的相关文章

输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)(解决)

输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和.要求时间复杂度为O(n). 输入描述: [重要]第一行为数组的长度N(N>=1) 接下来N行,每行一个数,代表数组的N个元素 输出描述: 最大和的结果 输入例子1: 8 1 -2 3 10 -4 7 2 -5 输出例子1: 18 思路:对输入的数组进行计算, import java.util.Scanner; public class Main { public static void main(String[]

软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)

题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 一.设计思想 1.首先随机产生一个数组,数组长度可自行输入,该数组里有正数也有负数. 2.从数组中第一个元素a[0]开始,依次计算a[0].a[0]+a[1].a[0]+a[1]+...+a[i]的值,即从a[0]开始的每个子数组的和,取出最大值. 3.再从数组第二个元素a[1]开始,依

返回一个整数数组中最大子数组的和。(二人结对编程)

 题目:返回一个整数数组中最大子数组的和. 要求: 1.要求程序必须能处理1000 个元素: 2.每个元素是int32 类型的,出现子数组之和大于整型表示的最大范围会出现什么情况: 3.输入一个整型数组,数组里有正数也有负数. 4.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 5.求所有子数组的和的最大值.要求时间复杂度为O(n).  设计思想:(1)将数组大小定义为n,用户输入p的值以确定该数组的长度,对于这n个元素用随机函数进行生成,每个元素定义为int32类型.(2)为

软件工程课程作业(四)--返回一个整数数组中最大子数组的和

伙伴链接:http://www.cnblogs.com/haoying1994/ 一.设计思想 本实验要求输入一个正负数混合的整型数组,长度不限,在此数组的所有子数组中找到和最大的数组,并求出相应数组的和,且时间复杂度为O(n).我们在课堂上共同讨论了多种解决方案,这些将在下面可能的解决方案中展示,在听了同学的思路和老师的讲解之后, 我们最终选取了老师课堂上描述的比较简便的思路.如下: 在输入数组的环节,采用for无限循环加if判断截止,直到触发回车键为止,将数组记录到Array中,数组长度记录

返回一个整数数组(环形数组)中最大子数组的和

一.实验题目 题目:返回一个整数数组中最大子数组的和. 要求:      输入一个整形数组,数组里有整数也有负数.      数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.      如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],……A[n-1],A[0]……A[j-1]之和最大.      同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.实验思路 由于这次所要求的子数组相当于一个环形的数组,所以就想到了类似数字右循环的形式来

返回一个整数数组中最大子数组的和(加强版)

题目:返回一个整数数组中最大子数组的和 要求:让数组手尾相连,构成一个环,同时返回最大子数组的位置 设计思想: 1.将环断开,成为一条线,分析这条线上的最大子数组,找到最大子数组,便可以找到最大子数组的起点和终点. 2.然后将终点看作起点,将起点看作终点,将线连成环,在进行寻找最大子数组(寻找时不算上起点和终点). 3.最后将先后找到的两个最大子数组连在一起就形成了这个整数组环的最大子数组,然后将记录的起点和终点输出出来,返回最大子数组的位置. 源代码: #include<iostream>

返回一个整数数组中最大数组的和

一:题目内容及设计思路 1.题目: 返回一个整数数组中最大数组的和 2.要求: (1)输入一个整数数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)求所有子数组的和的最大值.有球时间复杂度为O(n). 3.设计思路: (1)利用while循环输入各个整数,用getchar()函数判断while循环是否结束,当用户按下回车键时,即getchar()=='\n'时,跳出while循环: (2)记录下循环的次数,即数组长度: (3)调用函数Co

返回一个整数数组中最大子数组的和(2)

题目:返回一个整数数组中最大子数组的和 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 在做前面一道题目时,并没有考虑数组个数的上限及随机数位数问题,以为是要程序不出错,就是完美的.而通过课堂上验证上次程序,发现数组的和超过某一值时,将不会显示,但同样,程序不会报错,在小程序中后果并不严重,但是一旦开发大型

结对开发之返回一个整数数组中最大子数组的和

一.题目: 返回一个整数数组中最大子数组的和. 二.要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 三.分工 我选择了领航员的角色,伙伴则是驾驶员职责: 一下是我们的工作照: 四.感想