数组2--数组首尾相接,求最大子数组

结对开发我的队友王春帆,学号20132902博客地址 http://www.cnblogs.com/-beauTiFul/

设计思路:
  输入数组 1 -4 -2 7

  a[0]=sz[0];1
  a[1]=max(a[0]+sz[1],sz[1]);-3
  a[2]=max(a[1]+sz[2],sz[2]);-2
  a[3]=max(a[2]+sz[3],sz[3]);7

  max(a[0],a[1]...a[n])

  同样要用到数组1的思想,由于可以首尾相连,就转换成分别求{1,-4,-2,7}{-4,-2,7,1}{-2,7,1,-4}{7,1,-4,-2}这几个数组的最大子数组,再求各子数组的和。

#include<iostream>
#include <algorithm>
#include<cstdio>
#include<vector>
using namespace std;

int main()
{
    int i,j, szgs,szgs1, maxsum;
    int sz[100]  , a[100];//最大数组
    cout << "请输入数组元素个数:";
    cin >> szgs;
    cout << "请输入数组元素:";
    for (i = 0; i < szgs; i++)
    {
        cin >> sz[i];
    }
    a[0] = maxsum = sz[0];
    szgs1 = szgs;
    if (szgs>0)
    {
        for (j = 0; j < szgs; j++)
        {
            for (i = j + 1; i < szgs1; i++)
            {
                a[i] = max(a[i - 1] + sz[i], sz[i]);
                maxsum = max(maxsum, a[i]);
            }
            sz[szgs1] = sz[szgs1-szgs];
            a[j+1] = sz[szgs1-szgs+1];
            szgs1 =szgs1+ 1;
        }
    }
    cout << "最大子数组的和为:" << maxsum << endl;
}


时间: 2024-10-06 01:05:40

数组2--数组首尾相接,求最大子数组的相关文章

二维数组循环求最大子数组

一.题目要求 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和 二.源代码 #include<iostream.h> int main() {  int x,y,n,m;  int s[10][20];  int sum[10][20]; cout<<"请输入3行4列的矩

求最大子数组02

题目:整数数组中最大子数组的和 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],…… A[n-1],A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值. 这次任务多了一个要求就是这个数组是环形的, 也就是可以从A[i-1],…… A[n-1],A[0],A[1]这样的数组也阔以,那么首先想到的就是循环链表,然后控制求和的子数组长度即

结对——二维数组首尾相连求最大子数组和

一.题目与要求 题目.返回一个二维整数数组中最大子数组的和 要求.1.输入一个二维整形数组,数组里有正数也有负数. 2.二维数组首尾相接,象个一条首尾相接带子一样. 3.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和 二.设计思路 在上一次的以为循环数组的基础上,和二维数组求最大子数组相结合,将功能合并,完成题目要求. 第一步.将每一行的数组作为循环数组求最大子数组 第二步.通过枚举的方式,将每一种情况的和存入到新建二维数组中 第三部.通过逐列计算最大子数组的方法求所有子矩阵的最

结对开发之二维环数组求最大子数组的和4

结对成员:信1201-1班    黄亚萍 信1201-1班    袁亚姣 一.题目要求 要求:            输入一个二维整形数组,数组里有正数也有负数.            二维数组首尾相接,象个一条首尾相接带子一样.            数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.            求所有子数组的和的最大值.要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和. 二.设计思路 类似于3,将二维数组转化为一维数组来求最大子数组

数组中子数组之和最大值(首尾相接)

题目:求一维子数组的最大子数组之和(一维数组首尾相接)并写出子数组 人员: 陈晨:程序复查,结果测试. 王颖瑞:编写代码 思路: 1.求最大子数组之和:对于首尾相接的数组来说,如果计算子数组之和,最多把数组循环两遍,所以我们把数组的长度扩大了一倍(如果要算的数组是5位,那么数组就定义为10位,前半部分和后半部分一样),之后把这个数组进行分组(以要算的数组为5为例).第一个数到第五个数为一组,第二个数与第六个数为一组...第五个数到第九个数.分别把各组的子数组的最大值记录到另一个数组中.比较求出最

二维数组求最大子数组和(环形)

一.实验题目 返回一个二维数组中最大子数组的和. 实验要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.实验思路 这次我们设计的实验是手动输入二维数组的行数和列数,二维数组的环形求和我们设计的思路和一位数组的类似,就是把求完的数组的第一列放到最后,依次类推.求最大的子数组和时和二维数组的求和类似,即:输入的二维数组是 -1 

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

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

二维数组环求最大子数组

返回一个二维整数数组中最大联通子数组的和 2015年6月22日 1.题目 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 2.设计思路 参照环状一维数组,将二维数组进行扩展.只将数组的列数扩大为原来的2*n-1,行数不变. 3.源代码 #include <iostream> #include<time.h> using namespace std

一维数组头尾相连求最大子数组

题目: 返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 1. 设计思想: 因为已经写过了一维数组的求最大子数组程序.所以只是在原程序上进行修改.首先产生随机数数组,然后进行计算,因为要求时间复杂度

环数组求最大子数组的和

在结对开发的过程中,每个人分担不同的任务,由于我们在学习阶段,所以我自己也编写了一段小程序,但是总是缺少一个限制条件,让这段代码停下来,下面这段代码是我的同伴编写的,我只是做了一个测试. #include<iostream> using namespace std; void main() { int length; //数组的个数 int n; //数组变化后的长度 cout<<"请输入数组元素个数:"<<endl; cin>>leng