fl军哥

导航

 

源代码:

package text;
import java.util.Scanner;

import javax.swing.JOptionPane;

public class shuzu2 {
    public static void main(String []args)
    {
        Scanner s=new Scanner(System.in);
        String str1=JOptionPane.showInputDialog(null,"请输入数组长度:");
        int sum=Integer.parseInt(str1);
        int []a=new int[sum];
        JOptionPane.showMessageDialog(null,"请输入"+sum+"个数");
        for(int i=0;i<sum;i++)
        {
            String str2=JOptionPane.showInputDialog(null,"请输入第"+(i+1)+"个数:");
            a[i]=Integer.parseInt(str1);;
        }
        s.close();
        int sum1=0;
        for(int i=1;i<=sum;i++)
        {
            sum1=sum1+i;
        }
        int [] b=new int[sum1];
        int temp1=0;
        int max=a[0];
        int temp3=0;
        int temp4=0;
        for(int i=0;i<sum;i++)
        {
            int temp=0;
            for(int k=0;k<sum-i;k++)
            {  
                temp=temp+a[i+k];
                b[temp1]=temp;
                 if(max<b[temp1])
                 {  temp3=i;
                    temp4=k+1;
                     max=b[temp1];
                 }
                 if(temp1==0)
                    System.out.println("第1次:a[0]为最大子数组是"+a[0]);
                 else{
                 if(max==b[temp1])
                    System.out.println("第"+(temp1+1)+"次:a["+temp3+"]到a["+(temp3+temp4-2)+"],a["+i+"]到a["+(i+k)+"]的和最大为:"+temp);
                 else
                     System.out.println("第"+(temp1+1)+"次:a["+i+"]到a["+(i+k)+"],a["+temp3+"]到a["+(temp3+temp4-1)+"]的和最大为:"+max);
                 }
                 temp1++;
            }
        }
        System.out.println("所有子数组和数组如下:");
        for(int i=0;i<sum1-1;i++)
        {
            System.out.print(b[i]+" ");
        }
        System.out.println("");
        System.out.println("其排序如下");
        int temp=1;
        for(int i=0;i<sum1-1;i++)
        {
            System.out.print("第"+temp+"次排序:");
            for(int k=0;k<sum1-1-i;k++)
            {
                if(b[k]<b[k+1])
                {
                    int temp2=b[k];
                    b[k]=b[k+1];
                    b[k+1]=temp2;
                }
            }
            for(int j=0;j<sum1-1;j++)
            {
                System.out.print(b[j]+" ");
            }
            System.out.println("");
            temp++;
        }
        JOptionPane.showMessageDialog(null,"最大的子数组和为"+b[0]);
    }
}

结果:

 

posted on 2019-04-25 20:22  信1705-2张小军  阅读(85)  评论(0编辑  收藏  举报