• 求二维数组中子数组的最大值


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

    源程序代码:

    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;
        }
    
    }

    实验结果截图:

    总结:通过这个实验我学会了如何比较存储二维数组中最大子数组的和的算法,输出出来,但是将其输入到文件中我还需要继续去了解相关知识。

  • 相关阅读:
    使用dataInput:DescriptionViewer对输入的数据进行校验
    Nunit2.6.2调试.net4类库
    使用WCF RIA服务支持ASP.NET验证
    偶遇 Lc.exe已退出代码为1
    android程序连接后端web service时,提示:Permission denied
    设置XP系统的自动登录
    DomainDataSource的自动刷新
    安装CentOS时,显示 NET:Registered protocol family 2
    清除SqlServer2008的日志
    http://www.cnblogs.com/KnightsWarrior/archive/2010/08/27/1809739.html(博客主)
  • 原文地址:https://www.cnblogs.com/1502762920-com/p/11061294.html
Copyright © 2020-2023  润新知