结对开发_循环数组的最大值

题目要求:

  

  返回一维数组中最大子数组的和

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

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

  如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。

  同时返回最大子数组的位置。

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

  要求时间复杂度为O(n)

设计思路:(结对思考以及参考于其他同学)

  考虑到数组需要首尾相连,采取把数组的长度增加两倍,并把复制的数组写在在最后一个数的后面,这样在循环的过程中并不需要采用新的算法,只要把原来的代码稍微修改一下,加一个判断使得组成最大数组的长度不超过原数组的长度即可。

程序源代码:

#include <iostream.h>
#include <stdlib.h>
int main()
{
    int num,length,start,finish;
    start=0;
    finish=0;
    cout<<"请输入数组元素个数:";
    cin>>length;
    num=2*length;		//分配2倍数组空间,方便下次比较
    int* Array=new int[num];	 //分配数组空间

	for(int i=0;i<length;i++)    //数组正负交替出现
    {
		if(i%2==0)
			Array[i]=rand()%1000;
		else
			Array[i]=0-(rand()%1000);
    }
	cout<<"数组为:";
	for(i=0;i<length;i++)
    {
		cout<<Array[i]<<" ";
    }
    cout<<endl;

	//以下代码参考与其他同学以及度娘
    int max=Array[0];
    int sum=0;      //定义求和变量
    for(i=0;i<length;i++)
    {
       sum=0;
       for(int j=i;j<length+i;j++)
       {
           sum=sum+Array[j];
           if(sum>max)
           {
               max=sum;
               start=i;
               finish=j;
           }
       }
       Array[length+i]=Array[i];  //每次将已经计算过的数放到最后
    }
    if(finish>=length)
    {
        cout<<"最大子数组起始位置为:"<<start+1<<endl;
        cout<<"最大子数组终止位置为:"<<finish-length+1<<endl;
    }
    else
    {
        cout<<"最大子数组起始位置为:"<<start+1<<endl;
        cout<<"最大子数组终止位置为:"<<finish+1<<endl;
    }
    cout<<"最大子数组为:"<<endl;
    for(int m=start;m<=finish;m++)
    {
        cout<<Array[m]<<" ";
    }
    cout<<endl;
    cout<<"最大子数组的和为:"<<endl;
    cout<<max<<endl;

    delete []Array;
    return 0;
}

运行结果截图:

本对照片:

太菜了,还是低调一点吧。

实验总结:

  这个题我不会解,所以发的晚。最后参考其他大神同学的代码,并且充分的理解了其解题精髓。今后还要好好提高自己的能力,太菜了。

时间: 2024-10-11 21:13:05

结对开发_循环数组的最大值的相关文章

结对开发——循环数组的最大值

一 题目要求: 返回一维数组中最大子数组的和 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值. 要求时间复杂度为O(n) 二 设计思路:(结对思考以及参考于其他同学) 考虑到数组需要首尾相连,采取把数组的长度增加两倍,并把复制的数组写在在最后一个数的后面,这样在循环

结对开发5_循环二维数组最大字数组

一.思想 我们这次的思想和一维数组的思想一样,但是考虑到是二维的,所以其算法和结对开发3的算法一样.即加长数组的列数 加以控制条件,最后求出最大子数组的和,并输出. 二.源代码 // 结对开发5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" # include <iostream> # include <string> # define MaxRow 20 # define MaxCol 20 using namespa

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

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

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

要求:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 设计思路: 本次实验设计,把数组长度定在了5,然后定义一个长度为15的数组,依次存入数组子序列的和,然后用for循环比较出最大的一个,题目就得到了解决.由于课堂编程,并未考虑数组成员特别多的话如何实现. 源代码如下: 1 #include<iostream.h> 2 int main() 3 { 4 int i,a[5],b[15]

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

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

结对开发4----最大子数组(大数溢出)

结对成员:范德一,赵永恒 一.题目: 返回一个整数数组中最大子数组的和. 二.要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 三.设计思路 在上一次的实验中,我们设置的数组的个数能够很好的进行扩展,所以对于第一个要求处理1000个元素比较容易实现:对于第二个要求,我们主要是想确定最大的数到底有多大,即什么时候会发生溢出的问题,当问题

结对开发--求环数组的最大字数组

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如 果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 这次的主要问题在于这次的一位数组要首尾相连,允许A[i-1], …… A[n-1], A[0]……A[j-1]

结对开发---二维数组

结对: 严雅芳 20132988 王欣欣 20132990 (1)设计思路: 二维数组的求子数组的最大和,在本次设计中利用了一维数组的思路:从第一个数开始把数组相加,每加一个数对和进行判断,如果小于零,抛弃当前值,如果大于零,下一个数与零比较,小于零时,先将最大值与之前的和比较,在让和加上这个数,如果大于零,直接让和加上这个数,再取最大值和和之间的最大值.因为是二维数组:当到第n行时,对第n行和其前面的n-1.n-2.....0行进行设计,让第n行和其前面列数相同的每1.2.3....n行的数相

结对开发之环形数组

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