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

    设计思路:将二维数组转化为一维数组求和,将二维数组的第一行(列)赋值为新的一维数组,

    同样,赋值第二行(列)为另一个一位数组。分别求和比较最大值。

     1 //返回一个二维数组的最大子数组
     2 
     3 #include<iostream>
     4 #include<ctime>
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     int m, n;                      //数组大小
    10     int i, j, p, q, o;                //循环变量
    11     int a[100][100];               //数组
    12     int sh, x;                     //数值范围
    13 
    14     int sum, sum1 = -100, sum2 = -100;     //计算和
    15     int max = a[0][0];             //最大值
    16     int s[100];                    //转化成的一位数组
    17     int k = 0;                     //控制行数的变量
    18 
    19     cout << "请输入矩阵的行列数(上限100):";
    20     cin >> m >> n;
    21     cout << "请输入数值范围(a-b):" << endl;
    22     cin >> sh >> x;
    23 
    24     cout << "原矩阵为:" << endl;
    25     srand((unsigned)time(NULL));
    26     for (i = 0; i<m; i++)
    27     {
    28         for (j = 0; j<n; j++)
    29         {
    30             a[i][j] = rand() % (x - sh + 1) + sh;
    31             cout << a[i][j] << "  ";
    32         }
    33         cout << endl;
    34     }
    35     
    36     for (j = 0; j<n; j++)
    37     {
    38         s[j] = 0;
    39     }
    40     for (i = 0; i<m; i++)
    41     {
    42         while (k + i<m)
    43         {
    44             for (j = 0; j<n; j++)
    45             {
    46                 s[j] = s[j] + a[k + i][j];
    47             }
    48 
    49             for (p = 0; p < n; p++)
    50             {
    51                 for (q = 0; q <= p; q++)
    52                 {
    53                     sum = s[0];
    54                     for (o = q+1; o <= p; o++)
    55                         sum = sum + s[o];
    56 
    57                     if (sum > sum1)
    58                     {
    59                         sum1 = sum;
    60                     }
    61                 }
    62                 if (sum1 > sum2)
    63                 {
    64                     sum2 = sum1;
    65                 }
    66             }
    67             if (sum2 > max)
    68             {
    69                 max = sum2;
    70             }
    71 
    72             k++;
    73         }
    74         k = 0;
    75         for (j = 0; j<n; j++)
    76         {
    77             s[j] = 0;
    78         }
    79     }
    80 
    81     cout << "和最大子矩阵值为" << max << endl;
    82 
    83     return 0;
    84 }

    实验截图:

    总结:经过一小段时间的学习,将数组部分的一些简单问题搞明白了,并且从最基础的c++语句出发,看了看生疏的大一知识。感觉不学一定会倒退!

  • 相关阅读:
    composer的使用
    tp5短信接口的使用
    PHP序列化与反序列化
    PHP 的oop思想
    php单例模式
    统计图的使用(chart)
    jq的时间插件
    php中Excel操作
    Linux 常用命令
    think cmfx目录结构
  • 原文地址:https://www.cnblogs.com/helloalbert/p/4428775.html
Copyright © 2011-2022 走看看