首尾相连的一位数组最大子数组和

题目:在原有的一位数组上进行扩展,求首尾相连的最大子数组的和:

要求: 输入一个一维整形数组,数组里有正数也有负数。

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

求所有子数组的和的最大值。

结对编程要求: 两人结对完成编程任务。 一人主要负责程序分析,代码编程。

一人负责代码复审和代码测试计划。

发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)。

结对开发过程:

这次的编程开发是基于上次的以为数组,我和我的搭档@快乐的小菜鸟开始了认真的讨论,再结合课堂上的同学讨论,如何能在一维数组原有的基础上,加上首尾相连这个条件,同时降低时间复杂度,这种方法的大概思想是:遍历数组里面的每一个数将第一个数变为最后一个数,具体算法 a[i-1]=a[i],这样又变成了一个新的一维数组,输出每个数组的最大子数组和,然后比较每个输出的和,找出最大的数:

具体代码:

#include <iostream.h>  

int maxSum(int* a, int n)  //定义一个求一维数组的最大子数组和的方法
{
    int sum=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,temp,b;
    int  sum=0;
	int i;
	int a1,a2;
    cout<<"请输入数组的元素个数: "<<endl;
    cin>>n;
    cout<<"请输入数组的元素: "<<endl;
	int *a=new int[n];

    for( i=0;i<n;i++)
	{cin>>a[i];}
	cout<<"此首尾相连的数组中最大子数组的和有以下几种可能:"<<endl;
	cout<<"第1种排列方式:"<<endl;
    for( i=0;i<n;i++)
	{cout<<a[i]<<"  ";}
	cout<<"最大子数组和为:"<<maxSum(a,n)<<endl;
	a1=maxSum(a,n);
    for(b=1;b<n;b++)
	{
		temp=a[0];
	for(i=1;i<=n;i++)
	 {
        a[i-1]=a[i];

	 }
	   a[n-1]=temp;
	   cout<<"第"<<b+1<<"种排列方式:"<<endl;
       for( i=0;i<n;i++)
	   {cout<<a[i]<<"  ";}
	   cout<<"最大子数组和为:"<<maxSum(a,n)<<endl;
	   if(maxSum(a,n)>=sum)
	   {sum=maxSum(a,n);}
	}
	  a2=sum;
	  cout<<endl;
	  if(a1>=a2)
	  {cout<<"综上,最大的子数组和为:"<<a1<<endl;}
	  else
	  {cout<<"综上,最大的子数组和为:"<<a2<<endl;}

    return 0;
}

  

截图:

实验感想:

这次感觉题目算是比较简单,想通了其中的关键算法核心,就是a[i-1]=a[i],只不过算法复杂度可能不符合老师的要求!

结对伙伴截图:

时间: 2025-01-01 20:44:54

首尾相连的一位数组最大子数组和的相关文章

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

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

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

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

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

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

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

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

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

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

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

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

环形二维数组最大子数组的和

设计思路: 因为之前做过二维数组的和环形一维数组的,所以第一感觉就是能不能把这两种整改一下结合起来,所以采用的做法就是将二维环形变化为一维环形,在此采用的方法是从第一行开始,第一行计算出最大子数组,然后第一行和第二行相加为一维计算最大子数组,然后第一行.第二行和第三行,以此类推,最后将各子数组的最大值进行比较,得到最大的即为子数组和的最大值. 实验代码: //环形一维数组求最大子数组 package erwei; public class oneArray { private int i; pu

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

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

软件工程概论---环状二维数组最大子数组和

1,题目要求 根据软件工程概论--<环状一维数组最大子数组和>和<二维数组最大子数组和>两篇博客,求环状二维数组的和. 2,思路设计 根据前面两篇博客思路做参考.在二维数组的基础上扩充二维数组的列为2*col-1.再进行二维数组的求和即可. 3,代码 #include <iostream> #include<time.h> using namespace std; #define max(a,b) ((a)>(b)?(a):(b)) #define M

结对开发_求一维数组最大子数组和判断溢出

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