返回整数数组最大子数组的和

一.题目:

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

  要求:

  1.输入一个整形数组,数组里有正数也有负数。

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

  3.求所有子数组的和的最大值。要求时间复杂度为O(n)。

二.设计思路

  1.数组num[]长度已确定是N,将数组中字数组的和放到数组sum[]中

  2.sum[0]=num[0],sum[1]=num[0]+num[1],sum[2]=num[0]+num[1]+num[2]……

  sum[N]=num[1],sum[N+1]=num[1]+num[2]……如此循环,直至所有自己的和全部存进  数组sum中。

  3.然后求出数组sum中的最大值,再输出结果。

三.源代码

  

// 求和.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include"iostream.h"
#define SIZE 5									//数组的个数
#define MAXSIZE 100								//子集个数的最大值
void CaculateSum(int sum[],int length,int num[])//计算数组中各个子集的和
{
	int j=0;
	for(int i=0;i<SIZE;i++)
	{
		for(int k=i;k<SIZE;k++)
		{
			if(i==k)
			{
				sum[j]+=num[k];
			}
			else
			{
				sum[j]=sum[j-1]+num[k];
			}
			j++;
		}
	}
}
//求所有情况的个数
int GetAcc()
{
	int acc=0;
	for(int i=1;i<=SIZE;i++)
	{
		acc+=i;
	}
	return acc;
}
//找出数组中的最大值,length是b[]中的个数
int GetMax(int b[],int length)
{
	int max=b[0];
	for(int i=0;i<length;i++)
	{
		if(max<b[i])
		{
			max=b[i];
		}
	}
	return max;
}
int main()
{
	int num[SIZE],sum[MAXSIZE],max=0,acc;
	int count[2]={0,0};					//num[num]是要求的整数count[2]中是负数和正数的个数
	cout<<"请输入"<<SIZE<<"个整数:";
	for(int i=0;i<SIZE;i++)					//计算数组中正数和负数的个数
	{
		cin>>num[i];
		if(num[i]<0)
			count[0]++;				//负数的个数
		else
			count[1]++;				//正数
	}
	acc=GetAcc();
	for(i=0;i<acc;i++)
	{
		sum[i]=0;
	}
	if(count[0]==0)						//若全是正数的话
	{
		for(int i=0;i<SIZE;i++)
		{
			max+=num[i];
		}
	}
	else if((count[1]==0)||(count[0]==1))	         //若全是负数或者有一个正数
	{
		max=GetMax(num,SIZE);
	}
	else							//其他情况
	{
		CaculateSum(sum,acc,num);
		max=GetMax(sum,acc);
	}
	cout<<"最大子集的和是:"<<max<<endl;
	return 0;
}

四.运行结果及截图

  

  

  

  

  

  

五.结对开发的感想

  1.自己负责写代码,当自己写完交给队友之后,检查错误用的时间比较短,如果要是自己检查的话花的时间可能比较长,因为这是自己写的,当你检查的时候会不自觉的和当时编写代码的思想重合,可能就会漏掉一些逻辑上的错误。而自己的搭档则能客观的检查。

六.工作照

  2.

时间: 2024-08-03 19:21:06

返回整数数组最大子数组的和的相关文章

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

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

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

开始时间:14:00 结束时间:17:   20 要求: 1,程序可以处理1000个元素: 2,每个元素是int32类型的: 3,整型数组有正数也有负数: 4,可以求出所有子数组的和的最大值,时间复杂度为O(n) 5,小组成员:于芳娜,张素颖 设计思路 1, 如果不考虑时间复杂度,我们可以枚举出所有子数组并求出他们的和.不过非常进憾的是,由于长度为n的数组有O(n^2)个子数组,而且求一个长度为n的数组的和的时间复杂度为O(n). 因此这种思路的时间是O(n^3). 2, 很容易理解,当我们加上

返回一个二维整数数组最大子数组的和

 要求: 1,输入一个二维整形数组,数组里有正数也有负数. 2,二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和, 3,求所有子数组的和的最大值. 设计思路: 参照一维整数数组求解最大子数组的方法,我们想着将二维数组通过行不同,列相加的方法转化为一维整数数组再求解最大子数组之和. 具体实现:先求出每一行的最大子数组之和,之后比较得出最大和MaxSum,然后通过上述方法求二行的最大子数组之和并与MaxSum比较,用MaxSum存放较大值.以此类推,求三行,四行... 最后实现最大子数

求一维循环数组最大子数组的和

结对成员:信1201-1班 于海洋   袁佩佩 一.题目与要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 二.设计思路 利用之前的返回一个整数数组最大子数组的和程序的思路,不过这里将数放到一个链表里,首尾相连,来求最大子数组的和. 三.源

环状二维数组最大子数组求和

题目:返回一个二维整数数组中最大子数组的和.要求:输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样. n数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 结对开发过程: 这次的编程开发是基于上次的以为数

软件工程个人作业04(求数组最大子数组的和)

题目:返回一个整数数组中最大子数组的和. 要求:输入一个一维整形数组,数组里有正数也有负数.一维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值. 程序设计思想:程序中使用到一个用来求数组的最大子数组和的函数,这里可以将原数组的前n-1项加到数组的后面,形成一个新的数组,这样就可以求这种首尾相连的数组的最大子数组和了. 源代码: public class zishuzu {     /**     * @param

突现灵感想出较新简单算法--实现求一数组最大子数组的和

一.题目: 返回一个整数数组中最大子数组的和. 要求: 1.输入一个整形数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 首先将每一点看成辐射源,没点只能向右辐射找出所有可能的子数组求出最大值,如arr[5]={1,2,3,4,5}.首先1与1+2与1+2+3....到1+2+3+4+5找出最大值存入数组a[0]中. 再由2向右辐射找出所有可能的子数组求出最大值存入a[1]以

首尾相连的二维数组最大子数组求和

题目:返回一个二维整数数组中最大子数组的和.要求:输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样. n数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 结对开发过程: 这次的编程开发是基于上次的以为数

循环一维数组最大子数组

结对人员:张世通 梁世豪 一.题目 返回一维数组中最大子数组的和 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值. 要求时间复杂度为O(n) 二.设计思路 1.在上一次求一维数组最大子数组的问题上,进行拓展,继续使用类似的求和方法 2.通过定义变量start,fin

求一维数组最大子数组和判断溢出

一题目 一.实验要求 求一维数组最大子数组和 要求:1000个数以上,32位整数 二.设计思路 因为我们的程序一开始就可以运算1000个以上数的运算,最大个数为364,526,269,原因为找出. 这次实验主要目的是解决最大值溢出的问题,本来想输出这个溢出的数值,但没有实现,于是改为若溢出,则输出提示,并返回溢出的上一个最大值. 三.代码 1 // ketang4.cpp : 定义控制台应用程序的入口点. 2 //张世通 梁世豪 3 4 #include "stdafx.h" 5 #i