结对开发之《返回一个整数数组中最大子数组的和》

一、题目:

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

  要求:

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

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

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

二、设计思路

  1.定义一个大小为10的数组,接受任意十个自然正数;

  2.分别将连续的一个数,两个数,......,组合成子数组,分别求出包含一个元素的数组的最大值,两个元素的,三个元素的,......,然后再比较这十组的值,求出最大值,即为所求;

  3.单独判断一些特殊的容易计算的情况,比如全是负数、全是正数、只有一个正数。这样能有效地提高程序的效率。;

三、源代码

  1 import java.util.*;
  2
  3 class SuperMax
  4 {
  5     public static void main(String[] args)
  6     {
  7         Scanner sc=new Scanner(System.in);
  8
  9         int[] list = new int[10];//输入数组是必须先定义数组,否则出错!
 10         int[] arr1 = new int[9];//输入数组是必须先定义数组,否则出错!
 11         int[] arr2 = new int[8];//输入数组是必须先定义数组,否则出错!
 12         int[] arr3 = new int[7];//输入数组是必须先定义数组,否则出错!
 13         int[] arr4 = new int[6];//输入数组是必须先定义数组,否则出错!
 14         int[] arr5 = new int[5];//输入数组是必须先定义数组,否则出错!
 15         int[] arr6 = new int[4];//输入数组是必须先定义数组,否则出错!
 16         int[] arr7 = new int[3];//输入数组是必须先定义数组,否则出错!
 17         int[] arr8 = new int[2];//输入数组是必须先定义数组,否则出错!
 18         int[] ma = new int[10];//输入数组是必须先定义数组,否则出错!
 19
 20         int i=0,sum = 0;
 21         System.out.println("请输入数组:");
 22         for(int k=0;k<10;k++)
 23         {
 24             list[k]=sc.nextInt();
 25         }
 26         int max=list[0];
 27
 28         for(i=0;i<10;i++)
 29         {
 30             if(list[i]>max)
 31             {
 32                 max=list[i];
 33             }
 34
 35         }
 36         ma[0] = max;
 37         System.out.println("有1个元素最大子数组的和为"+ma[0]);
 38         for(i=0;i<9;i++)
 39         {
 40             arr1[i] = list[i]+list[i+1];
 41         }
 42         int max1=arr1[0];
 43         for(i=0;i<9;i++)
 44         {
 45             if(arr1[i]>max1)
 46             {
 47                 max1=arr1[i];
 48             }
 49
 50         }
 51         ma[1]=max1;
 52         System.out.println("有2个元素最大子数组的和为"+ma[1]);
 53         for(i=0;i<8;i++)
 54         {
 55             arr2[i] = list[i]+list[i+1]+list[i+2];
 56         }
 57         int max2=arr2[0];
 58         for(i=0;i<8;i++)
 59         {
 60             if(arr2[i]>max2)
 61             {
 62                 max2=arr2[i];
 63             }
 64
 65         }
 66         ma[2]=max2;
 67         System.out.println("有3个元素最大子数组的和为"+ma[2]);
 68         for(i=0;i<7;i++)
 69         {
 70             arr3[i] = list[i]+list[i+1]+list[i+2]+list[i+3];
 71
 72         }
 73         int max3=arr3[0];
 74         for(i=0;i<7;i++)
 75         {
 76             if(arr3[i]>max3)
 77             {
 78                 max3=arr3[i];
 79             }
 80
 81         }
 82         ma[3] = max3;
 83         System.out.println("有4个元素最大子数组的和为"+ma[3]);
 84         for(i=0;i<6;i++)
 85         {
 86             arr4[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4];
 87         }
 88         int max4=arr4[0];
 89         for(i=0;i<6;i++)
 90         {
 91             if(arr4[i]>max4)
 92             {
 93                 max4=arr4[i];
 94             }
 95
 96         }
 97         ma[4] = max4;
 98         System.out.println("有5个元素最大子数组的和为"+ma[4]);
 99         for(i=0;i<5;i++)
100         {
101             arr5[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5];
102         }
103         int max5=arr5[0];
104         for(i=0;i<5;i++)
105         {
106             if(arr5[i]>max5)
107             {
108                 max5=arr5[i];
109             }
110
111         }
112         ma[5] = max5;
113         System.out.println("有6个元素最大子数组的和为"+ma[5]);
114         for(i=0;i<4;i++)
115         {
116             arr6[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5]+list[i+6];
117         }
118         int max6=arr6[0];
119         for(i=0;i<4;i++)
120         {
121             if(arr6[i]>max6)
122             {
123                 max6=arr6[i];
124             }
125
126         }
127         ma[6] = max6;
128         System.out.println("有7个元素最大子数组的和为"+ma[6]);
129         for(i=0;i<3;i++)
130         {
131             arr7[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5]+list[i+6]+list[i+7];
132         }
133         int max7=arr7[0];
134         for(i=0;i<3;i++)
135         {
136             if(arr7[i]>max7)
137             {
138                 max7=arr7[i];
139             }
140
141         }
142         ma[7] = max7;
143         System.out.println("有8个元素最大子数组的和为"+ma[7]);
144         for(i=0;i<2;i++)
145         {
146             arr8[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5]+list[i+6]+list[i+7]+list[i+8];
147         }
148         int max8=arr7[0];
149         for(i=0;i<2;i++)
150         {
151             if(arr8[i]>max8)
152             {
153                 max8=arr8[i];
154             }
155
156         }
157         ma[8] = max8;
158         System.out.println("有9个元素最大子数组的和为"+ma[8]);
159         for(i=0;i<10;i++)
160         {
161             sum = sum+list[i];
162         }
163         ma[9] = sum;
164         System.out.println("有10个元素最大子数组的和为"+ma[9]);
165
166         int max9=ma[0];
167         for(i=0;i<10;i++)
168         {
169             if(ma[i]>max9)
170             {
171                 max9=ma[i];
172             }
173
174         }
175         System.out.println("最大子数组的和为"+max9);
176     }
177
178 }

四、结果截图

(既有正数又有负数)

(全正数)

(全负数)

五、心得体会
     在这次实验中,尝试和同学组队做实验,感觉还不错。好处是可以互相能借鉴对方的想法和思路,
 自己不注意的地方可能对方就注意到了,也能提高效率,但是缺陷就是每个人都有自己的思路,这样会在写代码的过程中比较耽搁时间,
 但是总体来说,还是效率比较高的,在以后的练习中还应该多加练习组队练习,毕竟在今后的工作中还是以团队为整体工作,
 经常的练习还是会有很好的提高的。

六、工作照(成员:杨广鑫,郭健豪)

时间: 2024-10-12 17:21:01

结对开发之《返回一个整数数组中最大子数组的和》的相关文章

结对开发之返回一个整数数组中最大子数组的和

一.题目: 返回一个整数数组中最大子数组的和. 二.要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 三.分工 我选择了领航员的角色,伙伴则是驾驶员职责: 一下是我们的工作照: 四.感想

结对开发_返回一个整数数组中最大子数组的和。

要求:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 设计思路: 本次实验设计,把数组长度定在了5,然后定义一个长度为15的数组,依次存入数组子序列的和,然后用for循环比较出最大的一个,题目就得到了解决.由于课堂编程,并未考虑数组成员特别多的话如何实现. 源代码如下: 1 #include<iostream.h> 2 int main() 3 { 4 int i,a[5],b[15]

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

#include<iostream>using namespace std;int max(int a,int b){ if(a>b) {return a;}else{ return b;}}int maxsum(int a[],int n){ int i;int maxsofar=0;int maxendinghere=0;for (i=0;i<n;i++){maxendinghere=max(maxendinghere+a[i],0);maxsofar=max(maxsofar

结对开发之返回一个二维整数数组中最大联通子数组的和

一.题目要求 输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n)题目:返回一个二维整数数组中最大子数组的和 二.解题思路 先对二维数组进行了重构,形成一个环状二维数组,然后再用求二维数组子矩阵最大和的方法求得最终结果. 三.程序代码 2 #include<iostream.h> 3 int main(int argc, char* argv[]

结对开发之《返回一个二维整数数组中最大子数组的和》

一.题目要求 题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划.发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照).(截止到周四4月9日24:00) 二.编程思路 我们的思路比较简单,采用的是将

软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)

题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 一.设计思想 1.首先随机产生一个数组,数组长度可自行输入,该数组里有正数也有负数. 2.从数组中第一个元素a[0]开始,依次计算a[0].a[0]+a[1].a[0]+a[1]+...+a[i]的值,即从a[0]开始的每个子数组的和,取出最大值. 3.再从数组第二个元素a[1]开始,依

返回一个整数数组中最大子数组的和。(二人结对编程)

 题目:返回一个整数数组中最大子数组的和. 要求: 1.要求程序必须能处理1000 个元素: 2.每个元素是int32 类型的,出现子数组之和大于整型表示的最大范围会出现什么情况: 3.输入一个整型数组,数组里有正数也有负数. 4.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 5.求所有子数组的和的最大值.要求时间复杂度为O(n).  设计思想:(1)将数组大小定义为n,用户输入p的值以确定该数组的长度,对于这n个元素用随机函数进行生成,每个元素定义为int32类型.(2)为

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

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

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

一.题目要求 题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大 两人结对完成编程任务.一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照).(截止到周四4月21日24:00) 二.设计思路 本次实验设计思路非常简单,就