环形数组的最大子数组求解

然后再用一维数组求解最大子数组的方法即可。值得注意的是,子数组的长度不可超过n,在我程序中有所体现。最终,因为没有要求时间复杂度的问题,我选择

了遍历的方法求解了此问题。

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int n;
 6     cout<<"输入环形数组的长度:";
 7     cin>>n;
 8     int *p;
 9     p=new int[n];
10     for(int i=0;i<n;i++)
11     {
12         cin>>p[i];
13     }
14     int *q;
15     q=new int[2*n-1];
16     for(int i=0;i<2*n-1;i++)
17     {
18         if(i<n)
19         {
20             q[i]=p[i];
21         }
22         if(i>=n)
23         {
24             q[i]=p[i-n];
25         }
26             //cout<<q[i];
27     }
28     int *a=new int[n*n];
29     //对数组a[]进行初始化;
30     for(int i=0;i<n*n;i++)
31     {
32         a[i]=0;
33     }
34     int t=0;
35     //利用枚举法,将子数组列举出;
36     for(int i=0;i<n;i++)
37     {
38         for(int j=i;j<n+i;j++)//因为环形子数组最大长度最多为n;而n+i-i即为n;
39         {
40             for(int z=i;z<=j;z++)
41             {
42                 a[t]=a[t]+q[z];
43             }
44             t++;
45         }
46     }
47     //求出最大子数组;
48     for (int i = 0; i <n*n; i++)
49     {
50         if (a[0] < a[i])
51         {
52             a[0] = a[i];
53         }
54     }
55     cout<< "最大子数组的和为:"<<a[0] << endl;
56
57     system("pause");
58     return 0;
59 }

运行结果截图:

合作图:

原文地址:https://www.cnblogs.com/Kirito-math/p/9901675.html

时间: 2024-11-06 08:33:13

环形数组的最大子数组求解的相关文章

环形数组求最大子数组之和

环形数组求最大子数组之和: 实验要求: 随机产生一个整形数组,假设首尾相连为环形,求其相连的字数组的和,并输出子数组的元素. 设计思路: 因为是环形,所以要考虑自设的头尾的情况,在此分为两大类考虑,一种为数组中存在正数情况,一种为全部为负数的情况: 在存在正数的情况中又可分为三种情况,一种为全部为正数的情况,一种为自设的头元素为正数,最后一种为自设的头元素为负数.根据这几种情况分类进行实现. 在实现过程中,对数组元素从头到尾进行遍历,如果遇到正数即用和相加,直到相邻的下一个为负数,即存放目前该最

输出一维环形数组中最大子数组和最大子数组的位置

组员 石鹤李海超 一.题目 输出一维环形数组中最大子数组的和 和最大子数组的位置 二.设计思想 把原数组扩大一倍,再把原数组放到后边,只需改变上次试验是循环变量即可求出最大子数组的和. 三.源代码 #include<iostream.h> #include<time.h> #include<stdlib.h> int main() { int arry[20]; int start,end,i; long sum,max; cout<<"Pleas

结对开发——环形一维数组求最大子数组和

题目:返回一个整数数组中最大子数组的和.要求:(1)输入一个整形数组,数组里有正数也有负数.(2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.(3)如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大.(4)同时返回最大子数组的位置.(5)求所有子数组的和的最大值.要求时间复杂度为O(n).一.设计思想 这个问题的最优解一定是以下两种可能.可能一:最优解没有跨过array[n-1]到array[0],即和非环形数

环形数组的最大子数组之和

上次课老师留了求一个数组的最大子数组之和,这次题目要求变化了一下,数组变成了环形的数组.主要的设计思想利用动态规划,非环形数组的任意一个元素只要判断前面的元素之和是否大于0就可以了,环形数组则还要判断数组元素后面的元素之和与0的关系.把数组复制一遍,用另外一个数组记录,从每个数组元素开头的子数组元素的个数不能超过数组的元素个数,否则就会多加某些元素. package Arraysum_circle; import java.math.*; public class FindClass_circl

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

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

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

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

用c++实现环形数组的最大子数组之和

思路: 把一维环形数组从某一段切开,然后转化为之前做过的一维数组最大子数组的和的问题, 然后都其中切开的每一段一维数组做比较,输出最大的值. 1 #include<iostream> 2 #include<stdlib.h> 3 #include<time.h> 4 using namespace std; 5 int main() 6 { 7 int n; 8 cout<<"请输入一维环形数组的长度:"; 9 cin>>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

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

成员:林彦汝.张金 (这次角色调换,我主要负责代码复审,代码测试计划:张金负责程序分析,代码编程.) 题目: 返回一个二维整数数组中最大子数组的和 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 思路: 在求一维环形数组和二维数组最大子数组的和的基础上,我们将两个的方法综合起来求解关于二维环形数组.假设原二维数组a[3][3]为 1 -2 3 1 -3

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

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