• 循环数组的最大子数组之和2


    题目:返回一个一维整数数组中最大子数组的和。
    要求:
    输入一个一维整形数组,数组里有正数也有负数。
    一维数组首尾相接,象个一条首尾相接带子一样。
    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
    求所有子数组的和的最大值。

    此次何琳琳负责程序分析,代码编程,张一博负责代码复审和代码测试计划。

    经分析讨论设计思路如下:

    设计思路:

    1、定义一个长为20的数组,先对前10个数进行初始化,后10个数等于前10个数;

    2、设置长度为10的循环依次以前十个数为头进行最大子数组的计算;

    3,再设置一个数组用来存储每次循环产生的最大子数组和;然后取最大值

    4、输出最大值

    源代码:

    复制代码
     1 //import java.util.Random;
     2 //import java.util.Scanner;
     3 import java.util.*;
     4 public class Test {
     5 
     6     public static void main(String[] args) {
     7         // TODO 自动生成的方法存根
     8         int []shuzu=new int[20];    
     9         int []max=new int[10];
    10         int i,sum=0;
    11         //初始化数组
    12         for(i=0;i<10;i++)
    13         {
    14             System.out.println("请输入第"+(i+1)+"个值");
    15             Scanner input=new Scanner(System.in);
    16             shuzu[i]=input.nextInt();    
    17         }
    18         for(i=10;i<20;i++)
    19         {
    20             shuzu[i]=shuzu[i-10];
    21         }
    22         int w=0;
    23         for(int x=0;x<10;x++)
    24         {
    25             sum=shuzu[x];       
    26             for(i=x;i<(x+10);i++)
    27             {
    28                 if(w<0)
    29                 {   
    30                     w=shuzu[i];
    31                 }
    32                 else
    33                 {
    34                     w+=shuzu[i];
    35                 }
    36                 if(sum<w)
    37                 {
    38                     sum=w;
    39                 }
    40             }
    41             w=0;
    42             max[x]=sum;
    43             System.out.println("各个子数组的最大子数组和为:");
    44             System.out.println(max[x]);
    45         }
    46         int max1=max[0];
    47         for(int q=0;q<10;q++)
    48         {
    49             if(max[q]>max1)
    50             {
    51                 max1=max[q];
    52             }
    53         }
    54         System.out.println("最大子数组和为"+max1);    
    55 
    56     }
    57 }
    复制代码

    结果截图:

     结果分析:w作为求和的中介,在每次不同首项求最大子数组和完毕后,必须初始化为0,不然会发生和的叠加。

  • 相关阅读:
    《火影忍者:究级风暴》渲染技术究极解析!
    动态数组和内置数组转换范例
    固定视角
    旋转
    时间间隔操作
    编辑器的一些批处理脚本
    访问GUItexture
    血槽制作
    动画循环播放
    软件测试修炼之道之——重现问题(上)
  • 原文地址:https://www.cnblogs.com/CkmIT/p/6694928.html
Copyright © 2020-2023  润新知