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

    #include<iostream>
    using namespace std;
    void max(int row,int col)
    {
    
        int ** a=new int*[row+1];
        int ** b=new int*[row+1];
        int h;//用于每一个一维数组上已经相加元素的个数够一个环则开始下一个
        for(int i=1;i<=row;i++)
        {
            a[i]=new int[2*col];
        }
        for(int i=1;i<=row;i++)
        {
            b[i]=new int[2*col];
        }
        cout<<"请输入"<<row<<""<<col<<"列的数组的元素"<<endl;
    
        int count=0;
        for(int i=1;i<=row;i++)
        {
            for(int j=1;j<=col;j++)
            {
                cin>>a[i][j];
                b[i][j]=a[i][j];
                if(a[i][j]<0)
                {
                    count++;
                }
            }
        }
        for(int i=1;i<=row;i++)//将二维数组加倍成环
        {
            for(int j=col+1;j<=2*col-1;j++)
            {        
                a[i][j]=a[i][j-col];
            }
        }
        /*cout<<"所输入的数组为:"<<endl;
        for(int i=1;i<=row;i++)
        {
            for(int j=1;j<=2*col-1;j++)
            {        
                cout<<a[i][j]<<" ";
            }
            cout<<endl;
        }*/
        int k,n=2;
        if(count<row*col)//即不是所有的元素都是负数的情况
        {
            int sum=0;
          for(int m=1;m<=row;m++)
          {
            k=n;
            for(int i=1;i<=row;i++)
           {
             for(int j=1;j<=2*col-1;j++)
            {
                b[i][j]=a[i][j];
            }
           }//b[i]是经过元算后的数组而a[i]用于保留原数组
            for(int i=m;i<=row;i++)
           {
            while(k<=i)//只有在行数大于等于2时才出现两行相加
            {
              for(int j=1;j<=2*col-1;j++)
             {
                    b[k][j]=b[k-1][j]+b[k][j];
             }
              k++;
            }
          }
            /*cout<<"b"<<endl;
            for(int i=1;i<=row;i++)
           {
             for(int j=1;j<=2*col-1;j++)
            {
                
                cout<<b[i][j]<<" ";
            }
            cout<<endl;
           }*/
            n++;
            
         for(int i=m;i<=row;i++)
          {
              int c=0;
              h=1;
              while(h<=col)
              {
               for(int j=h;j<=col-1+h;j++)
               {
                 if(c<0)
                {
                    c=b[i][j];
                }
                else
                {
                
                    c=c+b[i][j];
                }
               if(sum<c)
               {
                 sum=c;
               }
               //cout<<sum<<"  ";
              }
              h++;
              c=0;//一圈结束c清零sum保持
             }
            
         }
        }
        cout<<endl;
        cout<<"最大子数组的和为:"<<sum;
        }
        else
        {
            int sum=a[1][1];
        
           for(int i=1;i<=row;i++)
          {
            for(int j=1;j<=col;j++)
            {
               if(a[i][j]>sum)
               {
                   sum=a[i][j];
               }
            }
          }
                  cout<<endl;
        cout<<"最大子数组的和为:"<<sum;
        }
        for(int i=1;i<=row+1;i++)//删除动态数组
        {
            delete []a[i];
            a[i]=NULL;
        }
        for(int i=1;i<=row+1;i++)//删除动态数组
        {
            delete []b[i];
            b[i]=NULL;
        }
    }
    void main()
    {
        int row,col;//行和列数
         cout<<"请输入数组的行数和列数:";
        cin>>row>>col;
        max(row,col);
    }

    结果截图:

  • 相关阅读:
    shell脚本学习(1)列出一组IP内所有活动主机
    中兴ZXR10 GER4核心路由器配置案例
    中兴ZXR10 6905核心交换机配置案例
    NFS笔记(二)NFS服务器配置实例
    NFS笔记(一)NFS服务器工作原理及详细配置
    CentOS7.3下关于DHCP中继代理服务器的详细配置
    CentOS6下DHCP服务(二)简单配置案例及故障排查
    impdp 多个表空间到1个表空间通配符的使用
    11.2.0.4 has 启动失败
    oracle 11g 添加删除haip
  • 原文地址:https://www.cnblogs.com/yuntianblog/p/4456077.html
Copyright © 2011-2022 走看看