一维环形数组求和

组员:刘伟 李晨(http://www.cnblogs.com/jiajun1/

一 题目及要求:

题目:返回一个整数数组中最大子数组的和

要求(新加):①如果数组A[0]...A[j-1]首尾相邻,允许A[i-1]...A[n-1],A[0]...A[j-1]之和最大;

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

二 设计思想:

这个题目是在上个题目的基础的加上数组首位相连,并该数组最大子数组的和,实现方法就是把环变成直线的方法,在输入数组的时候把数组扩充一倍,然后求以每个数作为开始的,长度为n的,最大子数组的值,就可以得到结果

 1 #include<iostream>
 2 #include<time.h>
 3 #include<stdlib.h>
 4 #define N 100000
 5 using namespace std;
 6 int main()
 7 {
 8     int a[N];
 9     int start,end,i, sum,max,m,n;
10      cout<<"请输入个数:";
11      cin>>n;
12      m=n;
13      cout<<"请输入数组:";
14     for( i=0;i<n;i++)
15     {
16         cin>>a[i];
17         a[i+n]=a[i];
18     }
19     max=a[0];
20     start=0;
21     end=0;
22     for(int j=0;j<n;j++)
23     {
24         sum=0;
25         for(int k=j;k<n+j;k++)
26         {
27             sum=sum+a[k];
28             if(sum>max)
29             {
30                 max=sum;
31                 start=j+1;
32                 end=k+1;
33             }
34         }
35     }
36     cout<<"最大子数组的值为:"<<" "<<max<<endl;
37     cout<<"开始于第"<<start<<"个数"<<"    "<<"结束在第"<<end%n<<"个数"<<endl;
38     cout<<"这个子数组为:";
39     for(int c=0;c<end-start+1;c++)
40     {
41         cout<<a[start+c-1]<<"  ";
42     }
43 }

项目计划总结:

日期&&任务 听课 编写程序 阅读相关书籍 网上查找资料 日总计
周一 100 25 25 15 165
周二   30 35 25 90
周三   60 15 35 110
周四 100 30 30 25 185
周五   180   15 195
周六     60 15 75
周日     15   15
周总计 200 325 180 130 835

时间记录日志

日期 开始时间 结束时间 中断时间 净时间 活动 备注
3/21 14:00 15:50 10 100 听课 软件工程上课
  17:10 17:20   10 阅读书籍 《构建之法》《人月神话》
  21:00 21:25   20 网上查找资料  
3/22 14:00 15:00 10 110 结对编程 编写老师布置的作业
  16:00 17:00 10 110 看书 《人月神话》
3/23 21:00 21:30   30 结对编程 编写老师布置的作业
3/24 14:00 15:50 10 100 听课 软件工程上课
3/25 16:00 18:00   120 结对编程 编写老师布置的作业
3/26 9:00 9:30   30 看书 《构建之法》
3/27 9:00 9:30   30 看书 《人月神话》

缺陷记录日志:

  

日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
3月26日 1   编码 编码 10min

在环变链的时候出现了错误,最后用循环和拓展数组解决

好文要顶 关注我 收藏该文  

时间: 2024-10-12 17:31:20

一维环形数组求和的相关文章

《团队项目开发之三对一维环形数组的求解》

设计思想:通过把数组的长度扩大为原来的一倍,相当于新数组是由对原来的数组重复了一遍后而组成的,这样保证了数组以环状的形式,按照数组中每个数字的位序依次对它们可能形成的最大子数组依次进行比较,这样保证了能够始终记录每次最大子数组的位置,以便随着程序的进行不断更新直至得到最终的最大子数组之和以及最大子数组的下标. 源代码: //求一个一维环形数组的最大子数组之和,并要求返回组成最大子数组的下标 //李敏,Apr 12th #include<iostream> #include <time.h

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

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

数组连续最大子和及环形数组最大子和

问题1: /*求连续子数组的最大和: * 设curSum为当前子数组(ai, ai+1, ......, aj)的和 * sum存放到目前为止子数组和的最大值 * 1. cursum+ai>0; cursum=cursum+ai * 2. cursum+ai<=0; cursum=ai; */ 1 int maxsubarr(vector<int> &a) 2 { 3 if(a.size()==0) 4 return 0; 5 int sum=0x80000000; //s

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

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

输出二维环形数组中最大子数组和

组员 石鹤李海超 一.题目 二.设计思想 把解决一维环形数组,和普通二维数组的方法结合起来街是解决二维环形数组的方法. 三.源代码 #include<iostream.h> #include<time.h> #include<stdlib.h> int qiumax(int arry[],int max) { int i; long sum; for(i=0;i<5;i++) { for(i=0;i<5;i++) { arry[i+5]=arry[i]; }

用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;

结对开发之环形数组

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

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

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],再

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

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