• 二维数组最大子数组的和


    1.输入一个二维整形数组,数组里有正数也有负数。
    2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。
    3.求所有子数组的和的最大值。要求时间复杂度为O(n)。

    结对编程要求:
    两人结对完成编程任务。
    一人主要负责程序分析,代码编程。
    一人负责代码复审和代码测试计划。
    发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)

     设计思想:任意输入一个数组,有正有负,以第0行第0列元素为起点,分别计算i=1时矩阵和,i=2时矩阵和(j=0,1,2....),i=3(j=0,1,2....)时矩阵和等以此类推。

     创作过程:由于我们只有思想,但是由于个人基础问题不好实现,所以找到了信息院同学帮我们先在网上找到类似代码理一下思路,之后再按照类似思路初步编写,在专业同学的帮助下总算是完成了。

    代码:

    #include <iostream>
    using namespace std;
    #define M 1000
    int A[M][M];
    int AS[M][M];
    inline int ArraySum(int s, int t, int i, int j)//定义求数组部分和函数
    {
        return AS[i][j] - AS[i][t - 1] - AS[s - 1][j] + AS[s - 1][t - 1];
    }
    int max(int a, int b)
    {
        return(a>b ? a : b);
    }
    int main()
    {
        int m, n, i, j;
        cout << "请输入数组的行:";
        cin >> n;
        cout << "请输入数组的列:";
        cin >> m;
        cout << "请输入一个数组:" << endl;
        for (i = 0; i<n; i++)
        {
            for (j = 0; j<m; j++)
            {
                cin >> A[i][j];
            }
        }
        // 计算数组的部分和  
        for (i = 0; i<n; i++)//以(0,0)为定点一直到(i,j)求部分和
        {
            for (j = 0; j<m; j++)
            {
                AS[i][j] = A[i][j] + AS[i - 1][j] + AS[i][j - 1] - AS[i - 1][j - 1];
            }
        }
        int Max = A[0][0];
        for (int a = 0; a<n; a++)
        {
            for (int c = a; c<n; c++)
            {
                // 将子数组上下边界设为第a行和第c行,在这些子数组中取最大值  
                int IV = ArraySum(a, 0, c, 0);
                for (j = 1; j<m; j++)
                {
                    IV = max(ArraySum(a, j, c, j), ArraySum(a, j, c, j) + IV);
                    Max = max(IV, Max);
                }
            }
        }
        cout << "数组最大子数组之和为:" << Max << endl;
    }

     实现效果:

     
     

     

     

    照片:

     组员:赵新月https://www.cnblogs.com/xinyue6/

  • 相关阅读:
    个人作业二-举例分析流程图与活动图的区别与联系
    四则运算
    实验四 决策树算法及应用
    实验三 朴素贝叶斯算法及应用
    实验二 K-近邻算法及应用
    实验一 感知器及其应用
    实验三 面向对象分析与设计
    实验二 结构化分析与设计
    实验一 软件开发文档与工具的安装与使用
    ATM管理系统
  • 原文地址:https://www.cnblogs.com/zzzzxiaolan/p/9826209.html
Copyright © 2020-2023  润新知