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