• 二维数组的最大子数组


    题目:二维数组的最大子数组

    成员:马国彬-20113000 李小超-20113003

    思路:

           此程序,我们通过对上一次一维数组的改进,实现了二维数组的功能。如果不考虑时间复杂度,用2个for循环能够找出一维数组的最大子数组,而通过3层for循环,就能够找出二维数组的最大子数组。在第2层for循环里,分别写两个for循环,分别寻找每一行和每一列的最大子数组。然后第3个for循环里一共有4层循环,来实现找出能够合并行列的最大子数组。开始把max设置为a[0][0],然后设置一个s,每执行一次循环,就执行s=s+a[i][j],然后如果s比max大,就把s的值赋给max,最后就能找出最大子数组。

    纸上的设计:

    代码:

    // 二维最大子数组.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include<stdio.h>
    
    int main(int argc, char* argv[])
    {
        int a[4][5]={2,1,-3,-2,1,3,1,5,-3,-8,3,-1,-3,-2,6,2,4,6,-8,-3};
        int i,j,s=0,c,d,t,max,m,n,k,x,y;
        for(i=0;i<4;i++)
        {
            for(j=0;j<5;j++)
            {
                s=0;
                for(k=i;k<4;k++)
                {
                    s=s+a[k][j];
                    if(max<s)
                        {
                            max=s;
                            c=k;
                            d=j;
                            m=i;
                            n=j;
                        }
                }
                s=0;
                for(t=j;t<5;t++)
                {
                    s=s+a[i][t];
                    if(max<s)
                        {
                            max=s;
                            c=i;
                            d=t;
                            m=i;
                            n=j;
                        }
                }
                s=0;
               for(k=i;k<4;k++)
               {
                   for(t=j;t<5;t++)
                   {
                       s=0;
                       for(x=i;x<=k;x++)
                       {
                           for(y=j;y<=t;y++)
                           {
                               s=s+a[x][y];
                           }
                       }
                       if(max<s)
                        {
                            max=s;
                            c=x-1;
                            d=y-1;
                            m=i;
                            n=j;
                        }
                   }
               }
            }
        }
        printf("最大子数组为:从第%d行到%d行从第%d列到%d列最大值为:%d
    ",m,c,n,d,max);
        return 0;
    }

    实验截图:

  • 相关阅读:
    intent-filter的用法
    关于三星手机刷机,以GTN8000为例
    seamless video loop with videoview
    hashmap,list,vector,Linkedlist的优缺点
    vlc+mfc,搭建简单的播放器
    OA项目9:部门管理的上下级部门的功能实现
    OA项目8:表映射关系及跟对象之间的关系处理
    OA项目7:系统管理之部门管理
    OA项目6:项目优化
    OA项目5:系统管理之岗位管理
  • 原文地址:https://www.cnblogs.com/maguobin/p/3612477.html
Copyright © 2020-2023  润新知