一、设计思路
(1)用输入输出流来读取.txt中的数据;
(2)用两个数来遍历要求和的子数组;
如该3x4数组中的ab两个数,可以确定一个3x3的子数组。
a | . | . | |
. | . | . | |
. | . | b |
(3)GetSum函数来返回子数组的和;
(4)比较输出最大子数组和该数组的和。
二、源代码
1 // 最大值2.cpp : Defines the entry point for the console application. 2 // 袁佩佩 于海洋 信1201-1班 3 4 #include "stdafx.h" 5 #include "fstream.h" 6 #include "iostream.h" 7 #define MAXSIZE 50 8 9 //*****读取数组信息***** 10 void ReadArr(int arr[][MAXSIZE],int &len1,int &len2) 11 { 12 ifstream infile("Arr.txt"); 13 if(!infile) 14 cout<<"读取失败!"<<endl; 15 else 16 { 17 infile>>len1>>len2; 18 for(int i=0;i<len1;i++) 19 { 20 for(int j=0;j<len2;j++) 21 { 22 infile>>arr[i][j]; 23 } 24 } 25 } 26 } 27 //*****显示矩阵***** 28 void ShowArr(int arr[][MAXSIZE],int len1,int len2,int size1,int size2) 29 { 30 for(int i=len1;i<=size1;i++) 31 { 32 for(int j=len2;j<=size2;j++) 33 { 34 cout<<arr[i][j]<<"\t"; 35 } 36 cout<<endl; 37 } 38 } 39 //*****求和公式***** 40 int GetSum(int arr[][MAXSIZE],int len1,int len2,int size1,int size2) 41 { 42 int sum=0; 43 for(int i=len1;i<=size1;i++) 44 { 45 for(int j=len2;j<=size2;j++) 46 { 47 sum+=arr[i][j]; 48 } 49 } 50 return sum; 51 } 52 53 int main(int argc, char* argv[]) 54 { 55 int len1,len2,max,sum; //len1是行数,len2是列数 56 int line1,line2,row1,row2; //和最大的矩阵的两个坐标 57 int arr[MAXSIZE][MAXSIZE]; 58 ReadArr(arr,len1,len2); 59 cout<<"矩阵:"<<endl; 60 ShowArr(arr,0,0,len1-1,len2-1); 61 cout<<endl; 62 line1=0; 63 line2=0; 64 row1=0; 65 row2=0; 66 sum=0; 67 max=arr[0][0]; 68 for(int i=0;i<len1;i++) //第一个数的行数 69 { 70 for(int j=0;j<len2;j++) //第一个数的列数 71 { 72 for(int m=i;m<len1;m++) //第二个数的行数 73 { 74 for(int n=j;n<len2;n++) 75 { //第二个数的列数 76 sum=GetSum(arr,i,j,m,n); //求出这两个数构成的矩阵的和 77 if(sum>max) 78 { 79 max=sum; 80 line1=i; //保存第一个数的行 81 line2=m; //保存第二个数的行 82 row1=j; //保存第一个数的列 83 row2=n; //保存第二个数的列 84 } 85 } 86 } 87 } 88 } 89 cout<<"和最大的子矩阵:"<<endl; 90 ShowArr(arr,line1,row1,line2,row2); 91 cout<<"最大的和:"<<max<<endl; 92 return 0; 93 }
三、结果截图
四、心得体会
这次也是和上次一样,我们在课上讨论好算法的实现和程序的大致框架,然后课下再具体操作。我们讨论出来的是最保守最笨的算法,但却是最万无一失的方法。本来还想上去讲一讲呢,但是同学们分享的思路都比我们的高大上,于是就此作罢。我们还自我安慰道,他们的算法比较难实现。哈哈哈。
这次是我主要敲代码,他在旁边进行代码复审,程序的格式规范了许多。我相信很多同学都有自己的编程习惯,有些习惯比较好,有些是坏习惯,有些看起来根本不会影响大局,但其实是致命的。以后工作不可能自己写出来的程序是只经自己手的,是和自己的团队一起开发。与人合作,做起码得让别人看得懂程序或者看着舒服吧。所以还是最好写成最规范最标准的。
还有就是有别人在旁边做代码复审真的挺高效的。相信大家都深有体会,自己做的题目再检查三遍,也还是可能会有错误,但是旁人检查两边可能就把所有错误都找出来了。古人说得好啊:“当局者迷旁观者清。”我们两个在写这个程序的时候出现了两个大错误:一是函数在传二维数组的时候,形参的形式不对;而是计算并比较子数组和的时候,判断条件和初始值写错了。由于是我主笔啊,我调试了两次都没完全改正确,于海洋用笔写着在纸上过了一遍,就找出了最后的错误。
我觉得结对开发吧,还是重在实行,如果两个人没有全神贯注专心致志投入到这个过程中的话,效果是不大的。两个人出全力干的活,只要有一个人没出全力,那就无法最好的实现,也就无法得到最好的体验。
五、工作照
所有评论(0)