一、思想过程
结对人员:韩雪东,高扬
本次题目是在原来一位数组的基础上加以扩展到二维数组,求二维子数组的最大和。刚开始难免思维比较混乱,但在与雪东在课上交流后还是有了一点思路。毕竟是扩展,我们认为当然离不开一位数组,就想办法利用上次编译的程序,通过比较一维数组的最大值进而得到二维数组的最大值。
二、源代码
// erweishuzuqiuzuida.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "fstream.h" #include "iostream.h" #include "stdio.h" #define MAXSIZE 50 void read(int array[][MAXSIZE],int &len1,int &len2)//读取文件信息,并写入数组 { ifstream infile("array.txt"); if(!infile) cout<<"读取失败!"<<endl; else { infile>>len1>>len2; for(int i=0;i<len1;i++) { for(int j=0;j<len2;j++) { infile>>array[i][j]; } } } } void display(int array[][MAXSIZE],int len1,int len2,int size1,int size2)//显示数组信息 { for(int i=len1;i<=size1;i++) { for(int j=len2;j<=size2;j++) { cout<<array[i][j]<<" "; } cout<<endl; } } int * shuchu(int m[],int szcdx,int xhy)//m[]表示要测试的数组,szchx表示数组长度,xhy表示循环条件 { int t,p; int max,sum; //缓存数组赋值 int c[10000]; int v[10000]; int o=2*szcdx; int * temp= new int[o]; for(t=szcdx-xhy-1;t<szcdx;t++) { c[t-szcdx+xhy+1]=m[t]; } //循环 for(t=xhy;t>=0;t--) { sum=0; for(p=0;p<=t;p++) { sum=sum+c[p]; } v[t]=sum; } //循环输出最大值 max=v[0]; for(t=0;t<xhy+1;t++) { if(max<=v[t]) { max=v[t]; } //printf("%d ",v[t]); temp[t]=v[t]; } return temp; } int maxs(int s[],int length)//输出最大值 { int d=s[0]; for(int f=0;f<length;f++) { if(d<=s[f]) { d=s[f]; } } return d; } int main(int argc, char* argv[]) { int len1,len2; //len1是行数,len2是列数 int x[3]; int y[3]; int *k; int *l; int array[MAXSIZE][MAXSIZE]; read(array,len1,len2); cout<<"矩阵:"<<endl; display(array,0,0,len1-1,len2-1); for(int i=0;i<3;i++) { x[i]=array[0][i]; } int e=3; int w[6]; int u[6]; int q=0; printf("数组第一行子数组的和:"); for(i=2;i>=0;i--) { k=shuchu(x,3,i); for(int r=0;r<e;r++) { w[q]=k[r]; printf("%d ",w[q]); q++; } e--; } for(int j=0;j<3;j++) { y[j]=array[1][j]; } printf(" "); e=3; q=0; printf("数组第二行子数组的和:"); for(i=2;i>=0;i--) { l=shuchu(y,3,i); for(int r=0;r<e;r++) { u[q]=l[r]; printf("%d ",u[q]); q++; } e--; } printf(" "); int h[6]; printf("数组包含两行的子数组的和:"); for(int m=0;m<6;m++) { h[m]=w[m]+u[m]; printf("%d ",h[m]); } int k1=maxs(w,6); int k2=maxs(u,6); int k3=maxs(h,6); int maxx=k1; if(maxx<=k2) { maxx=k2; } if(maxx<=k3) { maxx=k3; } printf(" 最大和%d ",maxx); return 0; }
三、测试结果
四、心得体会
题目明显比上一次要复杂一点,在讨论的过程中遇到我们两个都不懂的问题,难免会感觉尴尬。在一个问题很长时间内得不到解决的时候,难免心里会浮躁,在这个时候如果是一个人的话,我也许会选择放弃,但当两个人在编程的时候,放弃是很难说出口的,所以虽然花了不少时间,我们还是把想要的结果表现了出来,即使我们的方法不是很完善,但我们很大程度上利用了第一次结对的成果,这不正像在《梦断代码》中看到的“好程序员懂得写什么,而卓越的程序员知道改写(并复用)什么。”,虽然我们复用的不大好,但我们尝试了。
附图: