体验结对开发的乐趣(5)--(首尾相连的二维数组求最大子数组和的问题)

结对伙伴:信1201-2班高扬、信1201-1班韩雪东

一、题目要求与设计思想

题目要求:在上一次的基础上把数组变为二维数组,然后首尾相接,形成连环,然后求和最大的子数组;

设计思想:一维数组首尾相连的问题已经得到解决,二位数组求和最大的子数组的问题也已经解决了,就是把这两个程序思想融在一起,然后在短短的时间内就完成了这次课堂项目。

二、源代码

  1 // erweishuzuqiuzuida.cpp : Defines the entry point for the console application.
  2 // 高扬 韩雪东
  3
  4 //#include "stdafx.h"
  5 #include "fstream.h"
  6 #include "iostream.h"
  7 #include "stdio.h"
  8
  9 #define MAXSIZE 50
 10
 11
 12 void read(int array[][MAXSIZE],int &len1,int &len2)//读取文件信息,并写入数组
 13 {
 14     ifstream infile("array.txt");
 15     if(!infile)
 16         cout<<"读取失败!"<<endl;
 17     else
 18     {
 19         infile>>len1>>len2;
 20         for(int i=0;i<len1;i++)
 21         {
 22             for(int j=0;j<len2;j++)
 23             {
 24                 infile>>array[i][j];
 25             }
 26         }
 27     }
 28 }
 29 void display(int array[][MAXSIZE],int len1,int len2,int size1,int size2)//显示数组信息
 30 {
 31     for(int i=len1;i<=size1;i++)
 32     {
 33         for(int j=len2;j<=size2;j++)
 34         {
 35             cout<<array[i][j]<<"\t";
 36         }
 37         cout<<endl;
 38     }
 39 }
 40 int * shuchu(int m[],int szcdx,int xhy)//m[]表示要测试的数组,szchx表示数组长度,xhy表示循环条件
 41 {
 42     int t,p;
 43     int max,sum;
 44     //缓存数组赋值
 45     int c[10000];
 46     int v[10000];
 47     int o=2*szcdx;
 48     int * temp= new int[o];
 49
 50     for(t=szcdx-xhy-1;t<szcdx;t++)
 51     {
 52         c[t-szcdx+xhy+1]=m[t];
 53     }
 54     //循环
 55     for(t=xhy;t>=0;t--)
 56     {
 57         sum=0;
 58         for(p=0;p<=t;p++)
 59         {
 60             sum=sum+c[p];
 61         }
 62         v[t]=sum;
 63     }
 64     //循环输出最大值
 65     max=v[0];
 66     for(t=0;t<xhy+1;t++)
 67     {
 68         if(max<=v[t])
 69         {
 70             max=v[t];
 71         }
 72         //printf("%d  ",v[t]);
 73         temp[t]=v[t];
 74     }
 75     return temp;
 76 }
 77 int maxs(int s[],int length)//输出最大值
 78 {
 79     int d=s[0];
 80     for(int f=0;f<length;f++)
 81     {
 82         if(d<=s[f])
 83         {
 84             d=s[f];
 85         }
 86     }
 87     return d;
 88 }
 89 int main(int argc, char* argv[])
 90 {
 91     int len1,len2;                       //len1是行数,len2是列数
 92
 93     int x[3];
 94     int y[3];
 95     int *k;
 96     int *l;
 97     int array[MAXSIZE][MAXSIZE];
 98     read(array,len1,len2);
 99     cout<<"矩阵:"<<endl;
100     display(array,0,0,len1-1,len2-1);
101
102
103
104     for(int i=0;i<3;i++)
105     {
106         x[i]=array[0][i];
107
108     }
109     int e=3;
110     int w[6];
111     int u[6];
112     int q=0;
113     printf("数组第一行子数组的和:");
114     for(i=2;i>=0;i--)
115     {
116
117         k=shuchu(x,3,i);
118         for(int r=0;r<e;r++)
119         {
120
121             w[q]=k[r];
122             printf("%d  ",w[q]);
123             q++;
124         }
125         e--;
126     }
127     for(int j=0;j<3;j++)
128     {
129         y[j]=array[1][j];
130     }
131     printf("\n");
132     e=3;
133     q=0;
134     printf("数组第二行子数组的和:");
135     for(i=2;i>=0;i--)
136     {
137
138         l=shuchu(y,3,i);
139         for(int r=0;r<e;r++)
140         {
141
142             u[q]=l[r];
143             printf("%d  ",u[q]);
144             q++;
145         }
146         e--;
147     }
148
149
150     printf("\n");
151     int h[6];
152     printf("数组包含两行的子数组的和:");
153     for(int m=0;m<6;m++)
154     {
155         h[m]=w[m]+u[m];
156         printf("%d  ",h[m]);
157     }
158
159
160     int k1=maxs(w,6);
161     int k2=maxs(u,6);
162     int k3=maxs(h,6);
163
164     int maxx=k1;
165     if(maxx<=k2)
166     {
167         maxx=k2;
168     }
169     if(maxx<=k3)
170     {
171         maxx=k3;
172     }
173     printf("\n最大和%d\n",maxx);
174
175
176
177
178     int r1;
179     int p1;
180     for(int t=0;t<2;t++)
181     {
182         p1=array[0][0];
183         r1=array[1][0];
184         for(q=0;q<2;q++)
185         {
186
187             array[0][q]=array[0][q+1];
188             array[1][q]=array[1][q+1];
189
190         }
191         array[0][2]=p1;
192         array[1][2]=r1;
193         for(int i=0;i<3;i++)
194         {
195             x[i]=array[0][i];
196
197         }
198         int e=3;
199         int w[6];
200         int u[6];
201         int q=0;
202         printf("数组第一行子数组的和:");
203         for(i=2;i>=0;i--)
204         {
205
206             k=shuchu(x,3,i);
207             for(int r=0;r<e;r++)
208             {
209
210                 w[q]=k[r];
211                 printf("%d  ",w[q]);
212                 q++;
213             }
214             e--;
215         }
216         for(int j=0;j<3;j++)
217         {
218             y[j]=array[1][j];
219         }
220         printf("\n");
221         e=3;
222         q=0;
223         printf("数组第二行子数组的和:");
224         for(i=2;i>=0;i--)
225         {
226
227             l=shuchu(y,3,i);
228             for(int r=0;r<e;r++)
229             {
230
231                 u[q]=l[r];
232                 printf("%d  ",u[q]);
233                 q++;
234             }
235             e--;
236         }
237
238
239         printf("\n");
240         int h[6];
241         printf("数组包含两行的子数组的和:");
242         for(int m=0;m<6;m++)
243         {
244             h[m]=w[m]+u[m];
245             printf("%d  ",h[m]);
246         }
247
248
249         int k1=maxs(w,6);
250         int k2=maxs(u,6);
251         int k3=maxs(h,6);
252
253         int maxx=k1;
254         if(maxx<=k2)
255         {
256             maxx=k2;
257         }
258         if(maxx<=k3)
259         {
260             maxx=k3;
261         }
262         printf("\n最大和%d\n",maxx);
263     }
264
265         return 0;
266
267
268 }

三、运行结果截图

四、心得体会

在读《梦断代码》之后,这本书上有一句话是这样写的:“当你把系统的一块新部件放进去,总要看看之后的5年获10年自己会不会后悔--你是否能拓展它、替代它”,随着问题的深入,我深刻的体会到了基础的重要性,体会到了代码的可扩展性给以后的修改带来多大的方便。还有就是1+1>2的问题,结对开发把两个人的想法汇到一起,不论是在编程效率上还是思路设计上都会比一个人的快,希望在团队开发的时候还会有这样的体会。

五、有图有真相

时间: 2024-10-18 21:48:29

体验结对开发的乐趣(5)--(首尾相连的二维数组求最大子数组和的问题)的相关文章

体验结对开发的乐趣

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

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

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

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

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

结对开发--循环一维数组求最大子数组的和

结对人员:韩雪东,高扬 一.设计思路 这次编程我们主要是以以前的程序为基础,在此基础上通过改变数组元素的位置,形成新的数组,并通过调用我们之前找最大值的函数,找出每个数组的最大值,然后经过比较求得结果. 二.源代码 // shuzuhuan0327.cpp : Defines the entry point for the console application. //作者:韩雪东,高扬 //时间:2015/3/27 #include "stdafx.h" #include "

体验结对开发的乐趣(6)--(电梯调度问题)

一.题目与设计思路 1.题目: 石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停.信1201-1班的张一东觉得在每层都停觉得不耐烦.由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层.在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层.问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少. 2.设计思路: 按照老师讲解的一些想法,首先确定一层上的人数,然后确定每个人物的楼层,通过计算得到所需爬的楼层的总数,然后通过一一的比较

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

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

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

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

结对开发五--对一千个数long型的一维数组求最大子数组的和

一.设计思想 我们根据第一个实验,再让他自动生成1000个随机long型数.大致思想和实验一一样,自己已埋入炸弹. 二.实验代码 package com.minirisoft; import java.util.*; class SuperMax { public static void main(String[] args) { long[] list = new long[1000];//输入数组是必须先定义数组,否则出错! long[] arr1 = new long[1000];//输入

结对——二维数组首尾相连求最大子数组和

一.题目与要求 题目.返回一个二维整数数组中最大子数组的和 要求.1.输入一个二维整形数组,数组里有正数也有负数. 2.二维数组首尾相接,象个一条首尾相接带子一样. 3.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和 二.设计思路 在上一次的以为循环数组的基础上,和二维数组求最大子数组相结合,将功能合并,完成题目要求. 第一步.将每一行的数组作为循环数组求最大子数组 第二步.通过枚举的方式,将每一种情况的和存入到新建二维数组中 第三部.通过逐列计算最大子数组的方法求所有子矩阵的最