• 输出一个二维数组的最大子数组的和。


    作业要求:

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

     2、二维数组中连续的一个子矩阵组成一个子数组。

     3、求所有子数组的和的最大值。

    设计思路:

    1·首先我们先定义要用到的二维数组和未知数,定义二维数组的最大行数和列数。

    2·输入一个二维数组行数和列数,通过if语句判断 行数和列数是否超过已定义的二维数组 ,如果超过了,提示重新输入。

    3·通过for循环语句输入数组的各个元素。

    4·确定子数组的最大上界,确定子数组有多少行,把子数组当成一位数组一样,求最大子数组的和。

    5·通过for语句和if语句的嵌套,完成最大子数组的和的求解与判断。

    6·最后用cout输出result.

    遇到的问题:

    1·语言保存运行时,没有出错,但是程序直接停止。因为我们没有在语言最后敲system("pause");

    程序语言:

                      

       #include <iostream>
        using namespace std;
        void main()
        {
         int x,y,i,j,m=0,A[100][100];
        cout<<"输入二维-数组的行和列";
        cin>>x>>y;
        if(x>100||y>100)
        {
       cout<<"请重新输入:";
       cin>>x>>y;
       }
        for(i=0;i<x;i++)
      {
        for(j=0;j<y;j++)
      {
        cin>>A[i][j];
       }

        }
       int sum[100]={0},max=0,result=A[0][0];

       for(i=0;i<x;i++)//确定子数组的最大上界(为第i行)
      {
        while(m+i<x)//确定子数组有m+i行
      {
       for(j=0;j<y;j++)
       {
        sum[j]=sum[j]+A[m+i][j];

        }
        max=0;
        for(j=0;j<y;j++)
        {
       if(max+sum[j]>sum[j])
        {
        max=max+sum[j];
        }
        else
         {
        max=sum[j];
        }
        if(max>result)
        {
        result=max;
        }
        }
        m++;
         }
        m=0;
        for(j=0;j<y;j++)
        {
         sum[j]=0;
         }

        }

        cout<<result;

        system ("pause");

        }

    运行结果:

  • 相关阅读:
    poj 1328 Radar Installation (贪心)
    hdu 2037 今年暑假不AC (贪心)
    poj 2965 The Pilots Brothers' refrigerator (dfs)
    poj 1753 Flip Game (dfs)
    hdu 2838 Cow Sorting (树状数组)
    hdu 1058 Humble Numbers (DP)
    hdu 1069 Monkey and Banana (DP)
    hdu 1087 Super Jumping! Jumping! Jumping! (DP)
    必须知道的.NET FrameWork
    使用记事本+CSC编译程序
  • 原文地址:https://www.cnblogs.com/w-t-c/p/9825522.html
Copyright © 2020-2023  润新知