zoukankan      html  css  js  c++  java
  • 返回一个二维数组中的最大子数组

    一、实验题目

         返回一个二维数组中的最大子数组

    二、实验思路   

         由于我们的能力有限,所以我们就设计了一个3行2列的二维数组。     现在以一个例子来说明一下我们的思想:

        例如:输入的二维数组是 -1  2

                                         3  4       

                                        -5  9

        (1)首先计算出第一行中有关-1的所有的子数组,然后计算出有关2的子数组,同样的道理可以计算第二行和第三行中的字数组。   

        (2)把上面计算出来的有关行中的子数组放在一个  b[3][3]即为 -1  1  2        的数组中。  

                                                                                             3  7  4                       

                                                                                           -5  4  9    

         (3)再求b[3][3]中的子数组的最大值,这次应该是按列来求。首先计算第一列中的子数组中的最大的数,先计算-1,然后计算-1+3,然后计算-1+3+5,求出最大的来,再3+(-5)和max比较大小,求出最大的,再(-5)和max比较大小。同理求第二、三列。即可得出最大的来。

    三、代码

     1 //制作人:信1201-2班 司新红  万彤
     2 #include <iostream.h>
     3 int main()
     4 {
     5     int a[3][2];//定义一个3*2的二维数组
     6     int max;
     7     int s;//求和
     8     int count;
     9     int b[3][3];
    10     cout<<"请输入二维数组(3*2)中的元素:"<<endl;
    11     for(int i=0;i<3;i++)
    12     {
    13         for(int j=0;j<2;j++)
    14         {
    15             cin>>a[i][j];
    16         }
    17     }
    18     for(i=0;i<3;i++)
    19     {
    20         count=0;
    21         for(int j=0;j<2;j++)
    22         {
    23             s=0;
    24             for(int l=0;l<2-j;l++)
    25             {
    26                 s=s+a[i][j+l];
    27                 b[i][count+l]=s;
    28             }
    29             count=count+2-j;
    30         }
    31     }
    32     //求最大数
    33     max=b[0][0];
    34     for(int j=0;j<3;j++)
    35     {
    36         for(i=0;i<3;i++)
    37         {
    38             s=0;
    39             for(int r=0;r<3-i;r++)
    40             {
    41                 s=s+b[r+i][j];
    42                 if(max<s)
    43                 {
    44                     max=s;
    45                 }
    46             }
    47         }
    48     }
    49     cout<<"最大子数组为:"<<max<<endl;
    50     cout<<endl;
    51     return 0;
    52 }

    四、运行结果

    五、心得体会   

         这次的程序对于我们来说有一点的难度,由于之前我们两个编程都不好,所以好多的都是现

    从书上学的。还有就是我俩刚看到这个代码的时候,根本一点思路都没有,而且看到题目中要求

    把数组放在一个叫input.txt的文件中,我俩更是什么都不会。所以最后就选择了手动输入一个二

    维数组,而且二维数组还有一定的限制,采用了3行2列,因为实在没有相处来如何自定义行和列

    数。再比较大小的时候,由于是二维数组,不像一维数组那样简单,所以开始没有一点思路,比

    较大小那,就采用了同学的一点思想。通过我俩一起编程,想如何做,我感觉收获还是挺多的,

    可以互补,在编程中也找到了一点点的成就感。

    我和我的小伙伴

  • 相关阅读:
    TiDB数据库05TiDB的用户管理与安全,文件与日志管理
    Java基础知识16Arrays、System常用方法使用
    TiDB数据库07TiDB集群管理(TiDB/TiKV/PD/TiFlash在线扩容与在线缩容)
    【转】在SQL Server中创建用户角色及授权(使用SQL语句)
    Javascript的IE和Firefox兼容问题
    JavaScript的私有变量
    JavaScript 中的内存泄露模式
    javascript内存泄漏问题
    全面理解javascript的caller,callee,call,apply概念(修改版)
    javascript跨域问题
  • 原文地址:https://www.cnblogs.com/zgsxh/p/4363660.html
Copyright © 2011-2022 走看看