zoukankan      html  css  js  c++  java
  • java实现求最大子数组和的逐步显示

    package 最大的子数组和;
    
    import java.util.Scanner;
    
    public class shuzu {
    	public static int maxArr(int a[]) {
    		int max=a[0];
    		for(int i=1;i<a.length;i++) {
    			if(a[i]>max) {
    				max=a[i];
    			}
    		}
    		return max;
    		
    	}
    	
    	public static void main(String args[]) {
    		/*
    		 * 生成数组
    		 */
    		System.out.println("请输入数组里数字个数");
    	    Scanner scan = new Scanner(System.in);
    	    int num = scan.nextInt();
    	    int[] array = new int[num];
    	    System.out.println("请输入"+num+"个数值,空格间隔");
    	    for(int i = 0;i < num;i++) {
    	    	array[i] = scan.nextInt();
    	    }
    	    int lon = ((1+num)/2+1)*num;//存放所有子数组和的 数组
    	    int[] sum = new int[lon];
    	   
    	    int sumchangdu = 0;
    	    int sumchangdu1  = 0;
    	    /*求所有子数组的和   放进sum数组中*/
    	    int[] maxarr = new int[num];//存放子数组和最大值的所有组成元素的数组
    	    for(int i = 0;i < num;i++) {
    	    	int[] arr = new int[num];//存放当前子数组和的所有组成元素的数组
    	    	
    	    	int asum = 0;
    	    	int changdu = 0;
    	    	for(int j = 0; j < num - i;j++) {
    	    		
    	    		arr[changdu] = array[i+j];
    	    		asum = asum + array[i+j];
    	    		sum[sumchangdu] = asum;
    	    		sumchangdu1 = sumchangdu+1;
    	    		System.out.println("当前执行第"+sumchangdu1+"步");
    	    		System.out.println("第"+ sumchangdu1 +"个子数组和为:"+sum[sumchangdu]);
    	    		System.out.print("组成当前的子数组和的元素为:");
    	    		for(int y = 0; y < arr.length;y++) {
    	    			if(arr[y]!=0)
    	    			System.out.print(arr[y]+" ");
    	    		}
    	    		System.out.println("");
    	    		if(sum[sumchangdu]==maxArr(sum)) {
                        
    	    			for(int k =0; k < arr.length;k++)
    	    				maxarr[k] = arr[k];
    	    			
    	    		}
    	    		System.out.println("前"+ sumchangdu1 +"个子数组和的最大值为:"+maxArr(sum));
    	    		
    	    		System.out.print("组成最大子数组和的元素为:");
    	    		
    	    		for(int x =0;x < maxarr.length;x++ ) {
    	    			if(maxarr[x]!=0)
    	    			System.out.print(maxarr[x]+"  ");
    		    		
    	    		}
    	    		System.out.println("");
    	    		System.out.println("输入0键开始执行下一步");
    	    		
    	    		int x = scan.nextInt();
    	    		if(x==0) {
    	    			System.out.println("--------------------------------------------");
    		    		sumchangdu++;
    		    		changdu++;
    	    		}
    	    		else {
    	    			System.out.println("输入有误,程序退出!");
    System.exit(0); } } } scan.close(); int max = sum[0]; for(int m = 1; m < lon;m++) { if(sum[m]>max) //求sum数组最大的值 max = sum[m]; } System.out.println("最大子数组和为:"+max);//输出最大的子数组和 } }

    要求:求一个一维数组的最大子数组和,并要求逐步实现,显示执行第几步,当前所处理的元素,当前子数组和,当前最大子数组和以及最大子数组和所组成的元素

    思路:定义int[] maxarr = new int[num];//存放子数组和最大值的所有组成元素的数组,int[] arr = new int[num];//存放当前子数组和的所有组成元素的数组,双层for循环实现,用方法public static int maxArr(int a[])判断当前所存储的子数组和是否为最大的子数组,如果是则存储,不是则继续利用上一个最大的子数组和的数组。

  • 相关阅读:
    中位数相关
    带权并查集
    组合数相关、多重集组合数
    LIS最长上升子序列
    提高你css技能的css开发技巧
    如何让搜索引擎抓取AJAX内容?
    Javascript异步编程的4种方法
    前端自动化构建工具gulp
    前端自动化构建工具
    git使用
  • 原文地址:https://www.cnblogs.com/zjl-0217/p/10770847.html
Copyright © 2011-2022 走看看