求二维数组中最大字数组的和

一、设计思路

(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]<<"	";
        }
        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;
}

 三.结果截图

  求二维数组中最大字数组的和

  求二维数组中最大字数组的和

  求二维数组中最大字数组的和

四.心得体会

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

五.工作照

  求二维数组中最大字数组的和