一、设计思路
(1)用输入输出流来读取.txt中的数据;
(2)用两个数来遍历要求和的子数组;
(3)GetSum函数来返回子数组的和;
(4)比较输出最大子数组和该数组的和。
二、源代码
// 最大值2.cpp : Defines the entry point for the console application.
// 于海洋 袁佩佩 信1201-1班
#include "stdafx.h"
#include "fstream.h"
#include "iostream.h"
#define MAXSIZE 50
//*****读取数组信息*****
void ReadArr(int arr[][MAXSIZE],int &len1,int &len2)
{
ifstream infile("Arr.txt");
if(!infile)
cout<<"读取失败!"<<endl;
else
{
infile>>len1>>len2;
for(int i=0;i<len1;i++)
{
for(int j=0;j<len2;j++)
{
infile>>arr[i][j];
}
}
}
}
//*****显示矩阵*****
void ShowArr(int arr[][MAXSIZE],int len1,int len2,int size1,int size2)
{
for(int i=len1;i<=size1;i++)
{
for(int j=len2;j<=size2;j++)
{
cout<<arr[i][j]<<"\t";
}
cout<<endl;
}
}
//*****求和公式*****
int GetSum(int arr[][MAXSIZE],int len1,int len2,int size1,int size2)
{
int sum=0;
for(int i=len1;i<=size1;i++)
{
for(int j=len2;j<=size2;j++)
{
sum+=arr[i][j];
}
}
return sum;
}
int main(int argc, char* argv[])
{
int len1,len2,max,sum; //len1是行数,len2是列数
int line1,line2,row1,row2; //和最大的矩阵的两个坐标
int arr[MAXSIZE][MAXSIZE];
ReadArr(arr,len1,len2);
cout<<"矩阵:"<<endl;
ShowArr(arr,0,0,len1-1,len2-1);
cout<<endl;
line1=0;
line2=0;
row1=0;
row2=0;
sum=0;
max=arr[0][0];
for(int i=0;i<len1;i++) //第一个数的行数
{
for(int j=0;j<len2;j++) //第一个数的列数
{
for(int m=i;m<len1;m++) //第二个数的行数
{
for(int n=j;n<len2;n++)
{ //第二个数的列数
sum=GetSum(arr,i,j,m,n); //求出这两个数构成的矩阵的和
if(sum>max)
{
max=sum;
line1=i; //保存第一个数的行
line2=m; //保存第二个数的行
row1=j; //保存第一个数的列
row2=n; //保存第二个数的列
}
}
}
}
}
cout<<"和最大的子矩阵:"<<endl;
ShowArr(arr,line1,row1,line2,row2);
cout<<"最大的和:"<<max<<endl;
return 0;
}
三.结果截图



四.心得体会
第二次的结对开发让我更加明白有搭档的益处,我的搭档是袁佩佩,这一次的代码是我们共同构思,由她敲的,但是结果不正确,应该是逻辑上的错误,当局者迷,代码是她敲的,所以检查的时候可能也是按照当时错误的思路想的,当我调试的时候,找到错误的地方,按照我自己的逻辑重新推一遍,然后就找到了错误的地方,并且该正之后,运行程序,经过多次试验,证明结果是对的。
五.工作照

浙公网安备 33010602011771号