• 二维数组


    package shuzu;
    
    import java.util.Scanner;
    
    public class TwoArray {
        public static void main(String[] args)
        {
            Scanner scanner=new Scanner(System.in);
            System.out.println("请输入二维数组的行和列:");
            int hang=scanner.nextInt();
            int lie=scanner.nextInt();
            System.out.println("请输入二维数组:");
            int[][] shuzu=new int[hang][lie];
            
            int i,j;
            for(i=0;i<hang;i++)
            {
                System.out.println("第"+(i+1)+"行数组");
                for(j=0;j<lie;j++)
                {
                    shuzu[i][j]=scanner.nextInt();
                }
                
            }
            
            System.out.println("此数组中连续和的最大值为:"+max(shuzu,hang,lie));
         
        }
        
        static int max(int shuzu[][],int hang,int lie)
        {
            int max=0,sum=0;
            int i,j;
            int[] b=new int[lie];
            int[] up=new int[hang];
            int[] down=new int[hang];
            int[] t=new int[hang];
            if(lie==1)
            {
                for (i=0;i<hang;i++) 
                {
                    sum+=shuzu[i][0];
                    if(sum<0) 
                    {
                        sum=0;
                    }
                    if(sum>max)
                    {
                        max=sum;
                    }
                }
    
               if(max==0) 
               {
                   for(i=0;i<hang;i++) 
                   {
                       if(i==0) 
                       {
                           max=shuzu[i][0];
                       }
                       if(shuzu[i][0]>max) 
                       {
                           max=shuzu[i][0];
                       }
                   }
                }
            }
            else
            {
                for(i=0;i<hang;i++)
                {
                    for(j=0;j<lie;j++)
                    {
                        b[j]=shuzu[i][j];
                    }
                    int[] c=new int[100];
                    c[0]=0;
                    int sum1=0,max1=0,k;
                    for(k=0;k<lie;k++)
                    {
                        if(sum1<0)
                        {
                            sum1=b[k];
                        }
                        else
                        {
                            sum1=sum1+b[k];
                        }
                        c[k]=sum1;
                    }
                    max1=c[0];
                    int mmark=0,smark=0;
                    for(k=0;k<lie;k++)
                    {
                        if (max1<c[k])
                        {
                            max1= c[k];
                            mmark = k;
                        }
                    }
                    for (k = mmark;k >= 0;k--)
                    {
                        if (c[k] == b[k])
                        {
                            smark = k;
                            break;
                        }
                    }
                    sum=max1;
                    
                    up[i]=smark;                                  
                    down[i]=mmark;
                    t[i]=sum;
         
                }
                int t2=t[0];
                for(i=0;i<hang-1;i++)
                {
                    if(up[i]<=down[i+1] && down[i]>=up[i+1])
                    {
                        t2+=t[i+1];
                    }
                    for(j=up[i];j<up[i+1];j++)
                    {
                        if(shuzu[i+1][j]>0) t2+=shuzu[i+1][j];                   //判别独立正数
                    }
         
                }
                max=t2;
            }
            return max;
        }
    
    }

    测试结果:

    设计思想:先判断输入二维数组的行数和列数,之后创建一个新的二维数组,将每次比较后较大的二维子数组存储到里面,最后的那个值就是最大的二维子数组。

  • 相关阅读:
    dynamic和匿名对象
    生成1亿个不重复的8位随机整数
    Storage,Memcache,KVDB都是存储服务,如何区分何时用何种服务
    深入理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法
    常用工具
    数字格式化,保留一位小数,无小数用0补充
    学习某些API的方法
    程序员的学习方法(程序员必看)【风中叶老师讲述】
    html的dtd声明
    数据库管理工具navicat基本使用方法——以MySql为例
  • 原文地址:https://www.cnblogs.com/qq1793033075/p/11070791.html
Copyright © 2020-2023  润新知