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

返回整数数组最大子数组和2

为了实现“敏捷开发”的目的,老师让我们采取“迭代”的方法进行项目的开发,这不,对于周一的求最大子数组和又有了新的要求,如下:

1、延续上次的要求,这里不再赘余…

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

3、同时返回最大子数组的位置;

4、要求程序必须能处理1000 个元素,且每个元素是int32 类型的。



一、实验设计思路

首先实现的是数组首尾相连,先存入数组,再将原数组反向存储形成环形数组。接着求最大子数组的和,遍历数组里面的每一个数将第一个数变成为最后一个数,形成一个新的数组,计算数组中每个最大子数组的和存入另一个数组max[]中,并记录最大子数组位置,最后找max[]数组中最大值为所求。

二、实验源代码

 1 //返回整数数组最大子数组和2
 2 //孔宇航 赵子茵 2016/3/25
 3
 4 #include <iostream>
 5 using namespace std;
 6 #define N 1000
 7
 8 int value(int arry[], int length)
 9 {
10     int max[N], max1;
11     int maxweizhi[N];
12     for (int j = 0; j<(length + 1) / 2; j++)
13     {
14         int sum = 0;
15         max1 = -9999999;                   //设置最低范围
16         int z = 0;
17         for (int i = j; i<(length + 1) / 2 + j; i++)   //环形数组找最大子数组和
18         {
19             sum = sum + arry[i];
20             if (sum >= max1)
21             {
22                 max1 = sum;
23                 z++;
24             }
25         }
26         max[j] = max1;
27         maxweizhi[j] = z;
28
29     }
30     int fmax = max[0];
31     int q = 0;
32     for (int i = 0; i<(length + 1 / 2); i++)  //在所有和的数组中找最大值
33     {
34         if (max[i]>fmax)
35         {
36             fmax = max[i];
37             q = i;
38         }
39     }
40
41     int weizhi = maxweizhi[q];
42
43     cout << "最大子数组为:" << endl;
44     for (int num = q; num<q + weizhi; num++)  //输出最大子数组的位置
45     {
46         cout << arry[num] << " ";
47     }
48
49     cout << "其和为:  " << fmax << endl;
50     return 0;
51 }
52
53 void main(int argc, char* argv[])
54 {
55     int arry[N];
56     int length = 1;
57     int max[N], max1; //max[N]存每一次求和的结果,在其中找最大值,为所求
58     int maxweizhi[N];
59     int num = 0;
60     int value(int arry[], int length);
61     cout << "请输入数组:" << endl;
62     cin >> arry[0];
63     while (getchar() != ‘\n‘)      //输入数组
64     {
65         cin >> arry[length];
66         length++;
67     }
68
69     for (int j = length; j<2 * length - 1; j++)   //形成环形数组,首位相连
70     {
71         arry[j] = arry[num];
72         num++;
73     }
74
75     cout << "由这几个数形成的环形数组";
76     value(arry, 2 * length - 1);
77
78 }

实验截图如下:

三、实验心得体会

通过这几次的结对开发,让我了解到软件开发过程中无论是结对还是团队合作都会比一个人的效率提高好多。我们都不是那种所谓的“抱大腿”的人,所以在团队中我们可以互相学习别人的好的思想来充实自己,因此还是有点期待以后的团队合作。

本次实验中对于怎样实现数组的“首尾相连”我和孔同学分别想到了很多的想法,其中也有几个想法被我们写成了可执行的文件,包括:扩展二倍数组、动态规划、定义开始和结束位置等方法,但是当考虑到还要输出最大子数组的位置的时候我们只在这个思想上面加上了这个功能。虽然有很多次尝试最后都失败了,但是我们要学会享受这个乐趣不是么?!哈!

时间: 2024-08-06 07:51:43

结对开发——返回整数数组最大子数组和2的相关文章

结对开发——一维数组最大子数组判断溢出

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

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

开始时间:14:00 结束时间:17:   20 要求: 1,程序可以处理1000个元素: 2,每个元素是int32类型的: 3,整型数组有正数也有负数: 4,可以求出所有子数组的和的最大值,时间复杂度为O(n) 5,小组成员:于芳娜,张素颖 设计思路 1, 如果不考虑时间复杂度,我们可以枚举出所有子数组并求出他们的和.不过非常进憾的是,由于长度为n的数组有O(n^2)个子数组,而且求一个长度为n的数组的和的时间复杂度为O(n). 因此这种思路的时间是O(n^3). 2, 很容易理解,当我们加上

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

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

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

 要求: 1,输入一个二维整形数组,数组里有正数也有负数. 2,二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和, 3,求所有子数组的和的最大值. 设计思路: 参照一维整数数组求解最大子数组的方法,我们想着将二维数组通过行不同,列相加的方法转化为一维整数数组再求解最大子数组之和. 具体实现:先求出每一行的最大子数组之和,之后比较得出最大和MaxSum,然后通过上述方法求二行的最大子数组之和并与MaxSum比较,用MaxSum存放较大值.以此类推,求三行,四行... 最后实现最大子数

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

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

首尾相连的二维数组最大子数组求和

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

循环一维数组最大子数组

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

求一维循环数组最大子数组的和

结对成员:信1201-1班 于海洋   袁佩佩 一.题目与要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 二.设计思路 利用之前的返回一个整数数组最大子数组的和程序的思路,不过这里将数放到一个链表里,首尾相连,来求最大子数组的和. 三.源

软件工程个人作业04(求数组最大子数组的和)

题目:返回一个整数数组中最大子数组的和. 要求:输入一个一维整形数组,数组里有正数也有负数.一维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值. 程序设计思想:程序中使用到一个用来求数组的最大子数组和的函数,这里可以将原数组的前n-1项加到数组的后面,形成一个新的数组,这样就可以求这种首尾相连的数组的最大子数组和了. 源代码: public class zishuzu {     /**     * @param