结对开发,首位相邻的数组求最大子数组

结对人员:张世通  梁世豪

一、题目

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

二、设计思路

  1、在上一次求一维数组最大子数组的问题上,进行拓展,继续使用类似的求和方法

  2、通过定义变量start,finish确定最大子数组的起始位置和终止位置

  3、每次将所有与数组元素A[i]有关的子数组求出后,将A[i]的值付给A[length+i];

  4、循环到最后一个数组元素A[length-1]时终止,即可遍历完所有数组元素

三、代码

 1 // ketang6.cpp : 定义控制台应用程序的入口点。
 2 //
 3 #include"stdafx.h"
 4 #include "iostream"
 5 using namespace std;
 6
 7 /*确定求和存储数组元素*/
 8 void Son(int Arr[],int length,int start,int finish)
 9 {
10     int max=Arr[0];
11     int add=0;//定义求和变量
12      for(int i=0;i<length;i++)
13      {
14         add=0;
15         for(int j=i;j<length+i;j++)
16         {
17             add=add+Arr[j];
18             if(add>max)
19             {
20                 max=add;
21                 start=i;
22                 finish=j;
23             }
24         }
25         Arr[length+i]=Arr[i];                                //每次将已经计算过的数放到最后
26      }
27      if(finish>=length)
28      {
29          cout<<"最大子数组起始位置为:"<<start+1<<endl;
30          cout<<"最大子数组终止位置为:"<<finish-length+1<<endl;
31      }
32      else
33      {
34          cout<<"最大子数组起始位置为:"<<start+1<<endl;
35          cout<<"最大子数组终止位置为:"<<finish+1<<endl;
36      }
37      cout<<"最大子数组为:"<<endl;
38      for(int m=start;m<=finish;m++)
39      {
40          cout<<Arr[m]<<" ";
41      }
42      cout<<endl;
43      cout<<"最大子数组的和为:"<<endl;
44      cout<<max<<endl;
45 }
46
47 /*主函数*/
48 int main()
49 {
50     int num,length,start,finish;//定义原始数组长度length,求和存储数组长度num
51     start=0;
52     finish=0;
53     cout<<"请输入数组元素个数:";
54     cin>>length;
55     num=2*length;
56     int* Arr=new int[num];//定义原始数组
57     cout<<"请输入数组数据"<<endl;
58     for(int i=0;i<length;i++)
59     {
60         cin>>Arr[i];
61     }
62     cout<<endl;
63     Son(Arr,length,start,finish);
64     delete []Arr;
65     return 0;
66 }

四、运行结果

五、总结收获

还是延续了第一次实验的主要想法,但因为一开始我们的代码没有实现求出位置,这次是新加的,就是时间复杂度没有达到题目的要求。和世通合作讨论的过程很愉快,我也很喜欢这种很有感觉的交流。老师说得对,我们在和别人合作编写软件的过程中应该多一些面对面的交流。

通过这么几次的软工作业,我越发觉得应该多学学怎么和别人合作,自己这方面很需要锻炼,以前一个人觉得还挺好,现在发现有人一起搭伙效率比自己用两倍时间做的事情还多,效率真的提高了很多!

六、合影

时间: 2024-12-25 23:12:27

结对开发,首位相邻的数组求最大子数组的相关文章

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

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

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

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

一维数组求最大子数组(解决溢出问题)

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 程序在宏里面定义出了数组长度的大小,在长度超过100万的时候程序直接崩溃,其实这并不是因为结果太大导致的数值溢出,而是因为内存溢出,我们的数组是定义在程序内部的,属于局部变量,存放位置在栈上

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

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

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

题目:返回一个整数数组中最大子数组的和.要求:(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],即和非环形数

结对开发--四实现循环二维数组求最大子数组的和

一.实现思路 再上一个实验基础上加上环,我们实现环的思想是每一列依次向此替换,直至替换出能出现的所有的二维数组,再用上一个求最大子数组的方法全部实现 二.实验代码 package com.minirisoft; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.Scanner; public class HuanTwoArray { public stat

一维数组求最大子数组的和(首位相邻32位)

返回一个整数数组中最大子数组的和,细化分析:1,在所有以元素tail结尾的子数组中,选出元素和最大的子数组,tail=1,2...n.2,以元素k结尾的和最大的子数组是包含以元素tail-1结尾的和最大的子数组还是就只有元素tail这一个元素,一共有这两个可选状态. 3,在得到以每个元素结尾的和最大的子数组之后,只要取其中最大值就是所有子数组中最大的子数组 4,将数组元素的类型定义为_int32,数组元素随机产生. 代码如下: //李妍 王硕 2016.3.25 #include <iostre

循环数组求最大子数组

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 把数组每一位向后移动一位,最后一位放在第一位.循环多次,每次求其最大子数组,存放到新数组内,比较新数组中最大数,

大数溢出数组求最大子数组

题目: 返回一个占内存较多的数组的最大子数组. 要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 思想: 老师要求主要是解决内存溢出问题,所以我写的只是一种测试,可能和题目不符,但思路应该一样,就是把大数字一分为二,就像计算机中的高八位低八位一样,我假设一个数字最大表示范围为0~100,如果想要表示9856,那么就用98后面的跟上56来表示,然后高位有正负,求最大子数组,将结果放大相应倍数 加上对应的低位数字 程序源代码: #include<io