zoukankan      html  css  js  c++  java
  • 课堂练习(一个环的最大子数组)

    题目:返回一个一维整数数组中最大子数组的和。
    要求:
    输入一个一维整形数组,数组里有正数也有负数。
    一维数组首尾相接,象个一条首尾相接带子一样。
    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
    求所有子数组的和的最大值。
     
    1》设计思想:
    主要是在上一次的基础之上进行改进,这次是要进行一个环的最大子数组,所以说我的思路就是把这个环所有的数组情况都
    复制另一个数组,每次将数组的数向后移一位,最后一位移到第一位,每次数组都求出一个最大值,然后比较最大值中的最大数,
    他就是环的最大值。
    其中的求最大子数组参见:http://www.cnblogs.com/sz20142898/p/5364141.html
     
    2》源代码:
     
     1 import java.util.*;
     2 /*
     3 求最大子数组问题
     4 要求数组中有正也有负数,如果全为负数,只需要找出
     5 最大的负数即可。
     6 */
     7 public class Shuzuhe {
     8     public static void main(String[] args){
     9         Scanner sc=new Scanner(System.in); //可以读出输入的数
    10         int L;
    11         System.out.println("请输入数组长度");
    12         L=sc.nextInt();
    13         int a[]=new int[L];//定义一个长为L 的数组,作为输入数组
    14         int c[]=new int[L];
    15         int sum1[]=new int[L];
    16         int d=sum1[0];
    17         System.out.println("请输入要进行处理的数(L个):");
    18         for(int i=0;i<L;i++)//输入L个数
    19         {
    20             c[i]=sc.nextInt();
    21         }
    22         
    23         
    24         
    25         for(int j=0;j<L;j++)
    26         {
    27             for(int k=0;k<L;k++)
    28             {
    29                 a[k]=c[(j+k)%L];
    30             }
    31             int sum=a[0];//用于记录和
    32             int b=0;//用于每次运算,找最大子数组
    33         
    34             for(int i=0;i<L;i++)
    35             {
    36                 if(b<0)
    37                 {
    38                     b=a[i]; //如果b<0,将b移到加为负数那位的后一位
    39                 }
    40                 else
    41                 {
    42                     b+=a[i];
    43                 }
    44                 if(sum<b)
    45                 {
    46                     sum=b; //sum为当前最大子数组的和
    47                 }
    48                 sum1[j]=sum;
    49             }
    50             if(d<sum1[j])
    51             {
    52                 d=sum1[j];
    53             }
    54         }
    55         System.out.print("最大子数组和为:");
    56         System.out.print(d);
    57     }
    58 }


    3》结果截图:

    4》结对情况

    我(孙哲)负责代码复审和代码测试,李营程序分析,代码编程,刚开始的时候设计思路存在问题,后来经过讨论确定正确的思路,

    并最终解决问题。

    5》开发照片

  • 相关阅读:
    06 | x86架构:有了开放的架构,才能打造开放的营商环境
    02 | 学习路径:爬过这六个陡坡,你就能对Linux了如指掌
    01 | 入学测验:你究竟对Linux操作系统了解多少?
    String、StringBuffer与StringBuilder区别
    JavaSE语言基础之字符串
    JavaSE语言基础之数组及其排序
    JavaSE语言基础之流程控制语句
    JavaSE语言基础之数据类型
    Java开发环境配置
    shell 脚本 自增
  • 原文地址:https://www.cnblogs.com/sz20142898/p/5384043.html
Copyright © 2011-2022 走看看