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