• 返回一个首尾相连的二维数组的最大子数组的和


    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.总结:思路很重要,这个是根据以前的思路推出来的,思路出来了,程序就更好写了

    陈杰:思路以及程序编写

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

  • 相关阅读:
    python 学习笔记7(类/对象的属性;特性,__getattr__)
    linux 误删文件恢复
    python 学习笔记6(数据库 sqlite)
    hive 函数 Cube
    边标志法填充多边形
    tolua#代码简要分析
    CocoaAsyncSocket + Protobuf 处理粘包和拆包问题
    【设计模式】适配器模式
    【设计模式】外观模式
    【操作系统】进程管理(二)
  • 原文地址:https://www.cnblogs.com/chenjie00/p/4447172.html
Copyright © 2020-2023  润新知