zoukankan      html  css  js  c++  java
  • 一维数组最大子数组续

    要求:按单步执行键,在GUI看到你的程序是如何一步一步算出目前最大子数组的范围,当前计算到的临时子数组是在哪里,等等。

             按自动运行键,在GUI看到程序自动运行,并自动显示过程,每次改变状态的时候要稍作停留。

    思路:由n个元素组成的数组,计算子数组的最大和,从首元素开始相加,若前m(m<n)个元素和为负数,则重新从第m个元素开始相加。最后输出“和”即为子数组的和的最大值。

    import java.util.Scanner;
    
    public class shuzu5 {
        public static void main(String []args) {
            Scanner input=new Scanner(System.in);
            int b[]=new int[5];
            int k=0;
            System.out.println("请输入5个数的数组:");
            for(int i=0;i<5;i++)
            {
                b[i]=input.nextInt();
            }
            int t=b[0];
            for(int i=0;i<5;i++)
            {
                if(b[i]<0) {k++;}
            }
            if(k==5)//判断数组中的数字是否全为负数
            {
                for(int i=0;i<5;i++)
                {
                    if(b[i]>t)
                        {
                         t=b[i];
                        }
                }
                System.out.println(t);
            }
        else
        {
            System.out.println("请选择运行方式:1:逐步运行;2:自动运行");
            int a=input.nextInt();
            int sum=0;
            int c=0;
            if(a==2)
            {
                for(int i=0;i<5;i++)//由n个数组成的数组,若前m(m<n)个数的和为非正数,则从第m个数重新开始相加
                {    System.out.println("第"+(i+1)+"步:");
                    if(c<0) 
                    {   System.out.println("已检查了"+(i+1)+"个子数组,前"+i+"个元素和为负数,第"+(i+1)+"个元素为:"); 
                        c=b[i];
                         System.out.println(c);
                        try {Thread.sleep(100);}catch(Exception e) {}
                    }
                    else 
                    {
                        c+=b[i];
                        System.out.println("已检查了"+(i+1)+"个子数组,第1个元素到第"+(i+1)+"个元素的最大子数组和:");
                        System.out.println(c);
                        try {Thread.sleep(100);}catch(Exception e) {}
                    }
                    if(sum<c) sum=c;
                    }
             }
            else if(a==1)
            {    int z=1;
                for(int i=0;i<5;i++)//由n个数组成的数组,若前m(m<n)个数的和为非正数,则从第m个数重新开始相加
                {   while(z==1)
                  {  
                    z=0;
                    System.out.println("第"+(i+1)+"步:");
                    if(c<0) 
                    {   System.out.println("已检查了"+(i+1)+"个子数组,前"+i+"个元素和为负数,第"+(i+1)+"个元素为:"); 
                        c=b[i];
                         System.out.println(c);
                        try {Thread.sleep(100);}catch(Exception e) {}
                    }
                    else 
                    {
                        c+=b[i];
                        System.out.println("已检查了"+(i+1)+"个子数组,第1个元素到第"+(i+1)+"个元素的最大子数组和:");
                        System.out.println(c);
                        try {Thread.sleep(100);}catch(Exception e) {}
                    }
                    if(sum<c) sum=c;
                 }
                    
                    if(i!=4)
                    {
                        System.out.println("继续请摁1");
                        z=input.nextInt();
                    }
                    }
                
             }
            System.out.println("最大子数组和为"+sum);
            }
           }
    }

    结果截图:

          

  • 相关阅读:
    linux的一些记录
    ant的一些记录
    cmd
    关于请求转发、重定向、url重写
    函数声明优先级高于变量赋值
    认识hasLayout——IE浏览器css bug的一大罪恶根源
    undefined与null的区别
    Javascript面向对象编程(三):非构造函数的继承
    Javascript面向对象编程(二):构造函数的继承
    Javascript 面向对象编程(一):封装
  • 原文地址:https://www.cnblogs.com/zwang/p/10771168.html
Copyright © 2011-2022 走看看