结队开发5----首尾相连数组

结队成员:范德一,赵永恒

一.题目

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

要求:

输入一个整形数组,数组里有正数也有负数。

数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

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

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

求所有子数组的和的最大值。要求时间复杂度为O(n)。

二.设计思路

我们在上次实验的基础上,通过在原有的循环体的最外边再添加了一个循环条件,这个循环条件是在第一次循环之后,将数组中每个数的值赋给它前面一个数,这样在最后一次循环的时候就实现了首尾相连。

三.实验代码

  1 #include<iostream.h>
  2
  3 #include<time.h>
  4
  5 #include<stdlib.h>
  6
  7
  8
  9 int main()
 10
 11 {
 12
 13     int a[10];
 14
 15     int m;              //m是每组个数
 16
 17     int *sum=new int[10];
 18
 19         srand((unsigned)time(NULL));
 20
 21     cout<<"*********************************"<<endl;
 22
 23     for(int i=0;i<10;i++)
 24
 25     {
 26
 27         int b;
 28
 29         b=rand()%2;
 30
 31         switch (b)
 32
 33         {
 34
 35             case 0:
 36
 37                     a[i]=rand()%100;
 38
 39                     break;
 40
 41             case 1:
 42
 43                     a[i]=-rand()%100;
 44
 45                     break;
 46
 47         }
 48
 49         cout<<a[i]<<"   ";
 50
 51        /* if((i%10)==4)
 52
 53         cout<<endl;   */      //每行10个输出,换行
 54
 55
 56
 57     }
 58
 59
 60
 61     cout<<"*********************************"<<endl;
 62
 63     int he=0;
 64
 65 for(int t=1;t<11;t++)
 66
 67 {
 68
 69     for(m=1;m<11;m++)
 70
 71     {
 72
 73         int temp=0;
 74
 75         for(int n=0;n<m;n++)
 76
 77         {
 78
 79             temp=temp+a[n];
 80
 81         }
 82
 83         for(int k=0;k<=(10-m);k++)
 84
 85         {
 86
 87             sum[k]=0;
 88
 89             for(int j=k;j<(k+m);j++)  //a[k]是每组第一个数
 90
 91             {
 92
 93                 sum[k]=sum[k]+a[j];
 94
 95             }
 96
 97             if(sum[k]>temp)
 98
 99             {
100
101                 temp=sum[k];
102
103             }
104
105         }
106
107         if(temp>he)
108
109         {
110
111             he=temp;
112
113         }
114
115
116
117     }
118
119     int temp1=0;
120
121     temp1=a[0];
122
123     a[0]=a[1];
124
125     a[1]=a[2];
126
127     a[2]=a[3];
128
129     a[3]=a[4];
130
131     a[4]=a[5];
132
133     a[5]=a[6];
134
135     a[6]=a[7];
136
137     a[7]=a[8];
138
139     a[8]=a[9];
140
141     a[9]=temp1;
142
143 }
144
145     cout<<"最大子数组的和为: "<<he<<endl;
146
147     cout<<"*********************************"<<endl;
148
149     return 0;
150
151 }

四.运行截图

五.实验感想

这是我们俩一起改进的第五个程序,结对开发确实觉得自己在两个人的合作中成长了不少,赵永恒对于代码的书写有自己的规范,我觉得能够很好的影响到我,在定义一个变量的时候他能将其意思很明确的表示出来,还有他喜欢用函数的思想来解决问题,在主函数外增加函数实现调用的功能,而我比较喜欢在主函数中直接加入条件控制,我觉得他的思想很值得我去学习,我的套路在一个比较大一点的程序中可能就显得很难实现。

六、合照

时间: 2024-10-13 22:44:04

结队开发5----首尾相连数组的相关文章

软件工程结队开发——输出一个数组中最大子数组的和

一.题目及要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 二.设计思路 程序分成两个部分: (1):找到数组中所有可能的子数组的和: 先从数组中第一个数开始算起,一直求到与它连续的的所有数的和存入数组son,然后从第二个数开始算起,求与它连续的数的和存入数组,以此类推,直至计算到最后一个数.有n个数据的数组能产生的子数组个数为n

课堂3—结队开发(求数组中子数组和的最大值)

结队开发:林彦汝.张金 题目:返回一个整数数组中最大数组的和. 要求: 1.输入一个整型数组,数组里有正数也有负数: 2.数组中连接的一个或多个整数组成一个子数组,每个子数组都有一个和: 3.求素有子数组的和的最大值. 本节课是学习结队开发,故先分配了任务:我主要负责程序分析,代码编程:张金负责代码复审,代码测试计划. 思路:我和搭档张金一起分析题目,统一解决方法.首先定义2个数组(假设有n个数),关系如下: max[0]为{arr[0].arr[0]+arr[1].....arr[0]+arr

[经典面试题][淘宝]求首尾相连数组的最大子数组和

题目 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],-arr[n-1],arr[0],-,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选). 输入: 输入包含多个测试用例,每个测试用例共有两行,第一行是一个整数n(1<=n<= 100000),表示数组的长度

NYOJ 745 首尾相连数组的最大子数组和

首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选). 输入 输入包含多个

nyoj 983 ——首尾相连数组的最大子数组和——————【最大子串和变形】

首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选). 输入 输入包含多个

NYOJ 983 首尾相连数组的最大子数组和

首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],-arr[n-1],arr[0],-,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选). 输入 输入包含多个测试用例,

ios开发数组排序(数组中包括字典)

iphone开发数组排序(数组中包括字典) 1.普通数组排序: NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"0",@"8",@"6",@"1",nil]; NSArray *sortedArray = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2){ if ([obj

[Jobdu] 题目1527:首尾相连数组的最大子数组和

题目描述: 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选). 输入: 输入包含多个测试用例,每个测试用例共有两行,第一行是一个整数n(1=<n<=100000),表示数组的

蓝鸥Unity开发基础—— 一维数组学习笔记

蓝鸥Unity开发基础-- 一维数组学习笔记 一.数组 之前我们学过很多数据类型,今天我们来学习数字,数字也是一种数据类型,那么,具体的数组是如何定义的? 数组:相同数据类型的成员组成的一组数据 Int类型数组:4  7  12  3  5--数组元素 Float数据类型数字:11.5 4.62 7.1 2.21 9.3--数组元素 数组中每一个元素都会分配一个数组下标,数组下标是从0开始的,有序排列,如:0 1 2 3 4 二.声明并初始化数组: 数组也是数据类型,所以也可以声明变量.使用ne

蚂蚁的难题(二)首尾相连数组的最大子数组和(DP)

蚂蚁的难题(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 下雨了,下雨了,蚂蚁搬家了. 已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈.小蚂蚁对每种食材都有一个喜爱程度值Vi,当然,如果Vi小于0的时候,表示蚂蚁讨厌 这种食材.因为马上就要下雨了,所以蚂蚁只能搬一次,但是能够搬走连续一段的食材.时间紧急,你快帮帮小蚂蚁吧,让它搬走的食材喜爱值和最大. 输入 有多组测试数据(以EOF结尾). 每组数据有两行,第一行有一个n,表示有n种食材排成了一个圈