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

1.要求:
(1)输入一个整形数组,数组里有正数也有负数。
(2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
(3)如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
(4)同时返回最大子数组的位置。
(5)求所有子数组的和的最大值。要求时间复杂度为O(n)。

2.设计思想 :

通过更改数组的长度将数组拟合成一个循环数组,将普通的一维数组A[n]的前n-1位数组数加到数组A[n]后面组成一个新的数组A[2n-1],再进行普通的一维数组的计算

3、源程序

#inc,lude <iostream>
using namespace std;
#define N 1000
int main(int argc, char* argv[])
{
  int arry[N];
  int length=1;
  int max[N],max1; //max[N]存每一次求和的结果,在其中找最大值,为所求
  int maxweizhi[N];
  int num=0;
  int value( int arry[],int length);
  cout<<"请输入数组:"<<endl;
  cin >> arry[0];
  while (getchar() != ‘\n‘) //输入数组
  {
    cin >> arry[length];
    length++;
  }  
  for(int j=length;j<2*length-1;j++) //形成环形数组,首位相连
  {
    arry[j]=arry[num];
    num++;
  }
  cout<<"由这几个数形成的环形数组";
  value(arry,2*length-1);
  return 0;
}
int value( int arry[],int length)
{
  int max[N],max1;
  int maxweizhi[N];
  for(int j=0;j<(length+1)/2;j++)
  {
    int sum=0;
    max1=-9999999; //设置最低范围
    int z=0;
    for(int i=j;i<(length+1)/2+j;i++) //环形数组找最大子数组和
    {
      sum=sum+arry[i];
      if(sum>=max1)
      {
        max1=sum;
        z++;
      }
    }
    max[j]=max1;
    maxweizhi[j]=z;
  }
  int fmax=max[0];
  int q=0;
  for(int i=0;i<(length+1/2);i++) //在所有和的数组中找最大值
  {
    if(max[i]>fmax)
    {
      fmax=max[i];
      q=i;
    }
  }
  int weizhi=maxweizhi[q];
  cout<<"最大子数组为:"<<endl;
  for(int num=q;num<q+weizhi;num++) //输出最大子数组的位置
  {
    cout<<arry[num];
  }
  cout<<"其和为: "<<fmax<<endl;
  return 0;
}

4.运行结果截图:

5.心得体会

通过本次实验,让我们对C++的掌握更加熟练,也对结对开发有了更深入的了解。

6.工作照片

原文地址:https://www.cnblogs.com/lyf18974296791/p/9904540.html

时间: 2024-11-05 13:37:42

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

软件工程课堂练习:返回一个一维整数数组中最大子数组的和

题目:返回一个一维整数数组中最大子数组的和.要求:输入一个一维整形数组,数组里有正数也有负数.一维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值. 此次何琳琳负责程序分析,代码编程,张一博负责代码复审和代码测试计划. 经分析讨论设计思路如下: 1.定义一个长为20的数组,先对前10个数进行初始化,后10个数等于前10个数: 2.设置长度为10的循环依次以前十个数为头进行最大子数组的计算: 3,再设置一个数组用来存储

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

题目: 返回一个一维整数数组中最大子数组的和. 要求: 输入一个一维整形数组,数组里有正数也有负数. 一维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 设计思想: (1)存在三个一维数组.第一个用于存储 输入的数组:第二个用于存储不同子数组的最大值:第三个用于存储 起始点不同的数组的最大值. (2)1.定制输入整数的个数 2.创建第一个一维数组,将数字输入 3. 利用循环,将所存在的第一个数组的数,进行加法

课堂练习(返回一个环状一维整数数组中最大子数组的和)

设计思路: (1)将循环数组拆为我们熟悉的以为数组 (2)通过每个数组元素在数组中位置前移一位来实现环的拆分(array[i1]=array[i1+1]) (3)在每次拆分后的数组中求出最大子数组和并记录到一个新的数组result[]中 (4)求出result[]中的最大值r作为循环数组的最大值 拆分后数组最大子数组喝的解决: (1)定义整数数组arr[i] (2)定义maxsum为最大子数组和并赋初值为arr[0] (3)定义一个中间变量temp由arr[0]计算子数组(连续的)的和当temp

返回一个首尾相连的整数数组中最大子数组的和

一.题目:n返回一个整数数组中最大子数组的和. 二.要求: (1)n输入一个整形数组,数组里有正数也有负数. (2)n数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)n如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. (4)n同时返回最大子数组的位置. (5)求所有子数组的和的最大值.要求时间复杂度为O(n). 三.实验思路: 思路一:将一个数组的元素输入,构造一个新数组,新数组是由两遍输入的数组构成,

返回一个二维整数数组中最大子数组的和(圆柱形)

题目: 返回一个二维整数数组中最大子数组的和 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 组员: 陈晨:负责代码复审和代码测试计划 王颖瑞:负责程序分析,代码编程 思路: 本次的任务是二维数组的环状求最大子数组,结合前两次的开发经验我们把一维数组环状的思路继续在二维数组中使用,首先输入数组时令数组的列扩大一倍,也就是令数组后的数组长度的值与前边的数

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

这次,在上次的要求中又多了一个条件 ——要求这个数组是环形的. 在上次的基础上,将这个代码进行改进,得到以下结果.下面把代码贴出来. 1 package yiweishuzu; 2 3 import java.util.Scanner; 4 5 public class shuzu_3 { 6 private static Scanner scan; 7 8 public static void main(String[] args) { 9 // 确定元素的个数 10 System.out.p

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

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

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

题目:返回一个二维整数数组中最大子数组的和. 要求: 1 输入一个二维整形数组,数组里有正数也有负数. 2 二维数组首尾相接,象个一条首尾相接带子一样. 3 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 4 求所有子数组的和的最大值.要求时间复杂度为O(n). 设计思想 目前的解决方案是最笨的方法,穷举,所以时间复杂度达不到题目的要求,还需要进一步的寻找答案 源代码 题目:返回一个二维整数数组中最大子数组的和. 要求: 1 输入一个二维整形数组,数组里有正数也有负数. 2 二

返回一个首尾相接的二维整数数组中最大子数组的和

一.题目:返回一个二维整数数组中最大子数组的和. 二.要求: (1)输入一个二维整形数组,数组里有正数也有负数. (2)二维数组首尾相接,象个一条首尾相接带子一样. (3)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (4)求所有子数组的和的最大值. 三.解题思路: 将两个同样的数组首尾相接合并成一个数组,在用以前求二维数组最大子数组的方法求解 四.源代码: #include<iostream> using namespace std; #include"math

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

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