zoukankan      html  css  js  c++  java
  • 结对开发Ⅱ——二维数组求和最大的子数组

    一、设计思路

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

    三、结果截图

    四、心得体会

      这次也是和上次一样,我们在课上讨论好算法的实现和程序的大致框架,然后课下再具体操作。我们讨论出来的是最保守最笨的算法,但却是最万无一失的方法。本来还想上去讲一讲呢,但是同学们分享的思路都比我们的高大上,于是就此作罢。我们还自我安慰道,他们的算法比较难实现。哈哈哈。

      这次是我主要敲代码,他在旁边进行代码复审,程序的格式规范了许多。我相信很多同学都有自己的编程习惯,有些习惯比较好,有些是坏习惯,有些看起来根本不会影响大局,但其实是致命的。以后工作不可能自己写出来的程序是只经自己手的,是和自己的团队一起开发。与人合作,做起码得让别人看得懂程序或者看着舒服吧。所以还是最好写成最规范最标准的。

      还有就是有别人在旁边做代码复审真的挺高效的。相信大家都深有体会,自己做的题目再检查三遍,也还是可能会有错误,但是旁人检查两边可能就把所有错误都找出来了。古人说得好啊:“当局者迷旁观者清。”我们两个在写这个程序的时候出现了两个大错误:一是函数在传二维数组的时候,形参的形式不对;而是计算并比较子数组和的时候,判断条件和初始值写错了。由于是我主笔啊,我调试了两次都没完全改正确,于海洋用笔写着在纸上过了一遍,就找出了最后的错误。

      我觉得结对开发吧,还是重在实行,如果两个人没有全神贯注专心致志投入到这个过程中的话,效果是不大的。两个人出全力干的活,只要有一个人没出全力,那就无法最好的实现,也就无法得到最好的体验。

    五、工作照

  • 相关阅读:
    Jenkins遇到问题一:jenkins配置权限不对导致无法登陆或者空白页面解决办法
    翻页功能的测试用例
    Jenkins学习二:Jenkins安装与配置
    Jenkins学习一:Jenkins是什么?
    Java MyEclipse下Ant build.xml简单实例详解
    Linux环境中Openfire安装指南
    Linux下查看文件和文件夹大小
    Tsung测试openfire服务器
    Windows环境中Openfire与Spark安装与配置指南
    解决-bash: lsb_release: command not found
  • 原文地址:https://www.cnblogs.com/JJJanepp/p/4358201.html
Copyright © 2011-2022 走看看