zoukankan      html  css  js  c++  java
  • 二维数组求最大子矩阵的和

    题目:返回一个二维整数数组中最大子数组的和

    要求:

           输入一个二维整形数组,数组里有正数也有负数。

           数组中连续的一个或多个正数组成一个子数组,每个子数组都有一个和。

    设计思想:

           将二维数组的所能组成的所有一维数组都存入到另一个数组中,利用求一维数组的最大子数组的和 求得。

     1 //求得二维数组Array中所能组成的所有一维数组放入到Brray中 
     2 //再利用求一维数组中最大子数组的和 求得每个一维数组即Brray每一列最大子数组(展开后即为Array子矩阵)的和
     3 //在所有和中最大的即为二维数组Array中最大子矩阵的和
     4 #include <iostream>
     5 using namespace std;
     6 int MaxNums(int Array[],int length)   //求一维数组最大子数组的和
     7 {
     8     int maxSumOfArray,maxSum;  
     9     maxSumOfArray=maxSum=Array[0];
    10     //当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。
    11     //如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和。
    12     for(int i=1;i<length;i++)
    13     {
    14         maxSumOfArray=max(maxSumOfArray+Array[i],Array[i]);   //变量maxSumOfArray 为包含Array[i] 与Array[i]    取最大
    15         maxSum=max(maxSum,maxSumOfArray);  ////变量maxSum 为maxSum 与 maxSumOfArray    取最大
    16     }
    17     return maxSum;
    18 }
    19 int main()
    20 {
    21     int len,hig;  //len为输入二维数组的列数(长)  hig为输入二维数组的行数(高)
    22     cout<<"输入行数";
    23     cin>>hig;
    24     cout<<"输入列数";
    25     cin>>len;
    26     int Array[10][10];
    27     for(int i=0;i<hig;i++)
    28     {
    29         for(int j=0;j<len;j++)
    30         {
    31             cin>>Array[i][j];
    32         }
    33     }
    34     int Brray[100][10];
    35     int a=0;
    36     for(int i=1;i<=hig;i++)
    37     {
    38         a+=i;
    39     }
    40     for(int i=0;i<a;i++)
    41     {
    42         for(int j=0;j<len;j++)
    43         {
    44             Brray[i][j]=0;
    45         }
    46     }
    47     // 1 列的有一种  2列的有2种 1的两个  2的一个  3的有3种...
    48     //计算二维数组Array所能组成的所有一维数组 依次放入到Brray中
    49     //二维数组Array所能组成的所有一维数组包括 第i列  第i列+第i+1列  第i列+第i+1列+第i+2列 ...
    50     int h=0;
    51     for(int n=0;n<hig;n++)
    52     {
    53     for(int i=0;i<hig-n;i++)
    54     {
    55         for(int j=0;j<len;j++)
    56         {
    57             for(int k=0;k<=n;k++)
    58             {
    59                 Brray[h][j]+=Array[i+k][j];
    60             }
    61         }
    62         h++;
    63     }
    64     }
    65     //输出二维数组Brray
    66     /*for(int i=0;i<a;i++)
    67     {
    68         for(int j=0;j<len;j++)
    69         {
    70             cout<<Brray[i][j]<<"  ";
    71         }
    72         cout<<endl;
    73     }*/
    74     int Max=MaxNums(Brray[0],len);
    75     for(int i=1;i<a;i++)
    76     {
    77         Max=max(Max,MaxNums(Brray[i],len));
    78     }
    79     cout<<"此二维数组中最大子二维数组的和为"<<Max<<endl;
    80 }

    结果截图:

     

  • 相关阅读:
    使用charles proxy for Mac来抓取手机App的网络包
    NProxy——Mac和Linux平台下的Fiddler
    NProxy——Mac和Linux平台下的Fiddler
    NProxy——Mac和Linux平台下的Fiddler
    【HTTP】Fiddler(二)
    ORA-12541: TNS: 无监听程序、监听程序当前无法识别连接描述符中请求的服务
    一些网站
    oracle 11g 创建普通用户
    ORACLE VARCHAR2
    LEFT JOIN , RIGHT JOIN ,INNER JOIN
  • 原文地址:https://www.cnblogs.com/L-Damon-v/p/5330329.html
Copyright © 2011-2022 走看看