zoukankan      html  css  js  c++  java
  • 返回一个首尾相连的二维数组的最大子数组的和

    1.编程思路:根据以前的首尾相连的一维数组的最大子数组求出每一行的最大子矩阵,然后再两行相加,求出最大子矩阵,一直到所有的行相加,求出最大子矩阵。比较其中最大的子矩阵值,最后输出最大子矩阵和的值;

    2.代码:

    #include<iostream>
    #include <ctime>
    #include <cstdlib>
    #define MAX 10000 
    using namespace std;
    int Max(int b[])
    {   
        int m[MAX],n=0,p=0; 
        for(int i=0;i<4;i++) 
        {       
            for(int j=0;j<4;j++)    
            {          
                n=n+b[i+j]; 
                m[p]=n;    
                p++;      
            }       
            n=0;   
        }  
        int max=m[0];  
        for(int i=0;i<p;i++)  
        {      
            if(m[i]>max)    
                max=m[i];  
        }   
        return max;
    }
    int main()
    {   
        int k[MAX],a[4][8],h[8]; 
        int i;
        int j;
    
        cout<<"二维矩阵为:"<<endl;
        for(i=0;i<4;i++)  
        {      
            for(j=0;j<4;j++)     
            {         
                a[i][j]=rand()%100-50; 
                a[i][j+4]=a[i][j];     
                cout<<a[i][j]<<" ";    
            }       
            cout<<endl; 
        }   
        for(i=0;i<4;i++) 
        {    
            k[i]=Max(a[i]);  
        }   
        int  q=4;   
        for(i=0;i<3;i++) 
        {       
            int t=0;  
            for(j=0;j<8;j++)  
            {                
                h[t]=a[i][j]+a[i+1][j];  
                t++;     
            }      
            k[q]=Max(h); 
            q++;  
        }  
        for(i=0;i<2;i++)    
        {  
            int t=0;  
            for(j=0;j<8;j++)    
            {                 
                h[t]=a[i][j]+a[i+1][j]+a[i+2][j];     
                t++;      
            }       
            k[q]=Max(h);  
            q++;   
        }  
        int t=0;    
        i=0;    
        for(j=0;j<8;j++)   
        {       
            h[t]=a[i][j]+a[i+1][j]+a[i+2][j]+a[i+3][j];   
            t++;  
        }  
        k[q]=Max(h);  
        q++;   
        cout<<endl;   
        int max=k[0]; 
        for(i=0;i<q;i++)   
        {  
            if(k[i]>max)   
                max=k[i];  
        }  
        cout<<"最大子矩阵的值为:";   
        cout<<max<<endl;  
        return 0;
    }

     3.结果截图:

    4.总结:思路很重要,这个是根据以前的思路推出来的,思路出来了,程序就更好写了

    陈杰:思路以及程序编写

    孟祥娟:测试以及博客发表

  • 相关阅读:
    Why does my Authorize Attribute not work?
    百度网页搜索部来自Console的招聘信息
    Javascript 日期时间超强正则表达式
    解决SQL Server [Suspect]
    我回来了
    不忘初心
    WEB系统技术开发方向
    使用postman模拟登录请求
    什么是蓝绿部署?
    element-ui Cascader 级联选择器示例
  • 原文地址:https://www.cnblogs.com/chenjie00/p/4447172.html
Copyright © 2011-2022 走看看