zoukankan      html  css  js  c++  java
  • 求二维数组中最大字数组的和

    一、设计思路

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

     三.结果截图

      

      

      

    四.心得体会

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

    五.工作照

      

  • 相关阅读:
    python手写神经网络实现识别手写数字
    记录:tensoflow改错TypeError: Cannot interpret feed_dict key as Tensor: Can not convert a float into a Te
    6 TensorFlow实现cnn识别手写数字
    记录:python读取excel文件
    matlab手写神经网络实现识别手写数字
    把当前文件夹的xlsx或xls文件合并到一个excel文件中的不同sheet中
    Mac卸载go
    vue中axios的post和get请求示例
    vue配置请求拦截器和响应拦截器
    vue中main.js配置后端请求地址
  • 原文地址:https://www.cnblogs.com/menglikanhualuo/p/4366562.html
Copyright © 2011-2022 走看看