体验结对开发的乐趣(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的问题,结对开发把两个人的想法汇到一起,不论是在编程效率上还是思路设计上都会比一个人的快,希望在团队开发的时候还会有这样的体会。

五、有图有真相

posted @ 2015-04-01 17:46  韩东东  阅读(263)  评论(1编辑  收藏  举报