結對伙伴:信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的問題,結對開發把兩個人的想法匯到一起,不論是在編程效率上還是思路設計上都會比一個人的快,希望在團隊開發的時候還會有這樣的體會。
五、有圖有真相
