zoukankan      html  css  js  c++  java
  • 软件工程作业06 (循环子数组)

    ---恢复内容开始---

    在第5次的要求的基础之上又添加了新的要求:存放数据的数组是个循环子数组,按照作业05 原来的要求解答新的问题:

    条件变更:不要求时间复杂度为O(n);

    实现思想:

    主要的思路还是和作业05的差别不大,现在只说改变了的部分。

    从array【0】开始有添加了一个循环,让其每次都循环固定次数(数组长度次),依次是array【0】到数组结尾,array【1】到array【0】,array【2】到array【1】。。。

    直到array【n】到array【N-1】;

    程序实现代码:

     1 package e;
     2 import java.math.*;
     3 import java.util.Random;
     4 import java.util.Scanner;
     5 @SuppressWarnings("unused")
     6 public class Array {
     7 
     8     /**
     9      * @param args
    10      */
    11      static int array[]=new int[10000];
    12      static void rand(int number,int fw)
    13         {
    14             
    15             for(int i=0;i<number;i++)
    16             {
    17                 int m=-1;
    18                 Random rd1=new Random();
    19                 m=rd1.nextInt(2);
    20                 Random rd=new Random();
    21                 if(m==1)
    22                 {
    23                     array[i]=rd.nextInt(fw);
    24                 }
    25                 else
    26                 {
    27                     array[i]=-(rd.nextInt(fw));
    28                 }
    29             }
    30        }
    31     public static void main(String[] args) {
    32         // TODO Auto-generated method stub
    33         @SuppressWarnings("resource")
    34         Scanner a=new Scanner(System.in);
    35         System.out.println("请输入随机生成的数组的长度以及取值范围(只写正数)");
    36         int numbers=a.nextInt();
    37         int Fws=a.nextInt();
    38         rand(numbers,Fws);
    39         int max = Find.find(array,numbers);
    40         for(int i = 0;i < numbers;i++)
    41         {
    42             System.out.print(array[i]+" ");
    43             if(i%5==0)
    44             {
    45                 System.out.print("
    
    ");
    46             }
    47         }
    48         System.out.println();
    49         System.out.println("最大子数组之和为:"+max);
    50     }
    51 }
    52 
    53 class Find
    54 {
    55     public static int find(int[] array,int number)
    56     {
    57         int array1[] = new int[array.length];
    58         array1[0] = array[0];
    59         int maxVal = array[0];
    60         for(int j=0;j<number;j++)
    61         {
    62         
    63             for(int i =j,n=0;n<=number-1;i++,n++)
    64         
    65             {
    66             //如果第i+1个元素的前i个元素之和大于0就把这i个元素的和加到第i+1个元素上面        即前i个元素对第i+1个元素有贡献
    67             
    68                 if(array1[i%number] > 0)
    69             
    70                 {
    71                 
    72                     array1[i%number+1] = array1[i%number] + array[i%number+1];
    73             
    74                 }
    75             //如果第i+1个元素的前i个元素之和小于0不加        即前i个元素对第i+1个元素没有贡献
    76             
    77                 else
    78             
    79                 {
    80                 
    81                     array1[i%number+1] = array[i%number+1];
    82             
    83                 }
    84             //更新最大值 
    85             
    86                 maxVal = Math.max(maxVal,array1[i+1]);
    87         
    88             }
    89         }
    90         return maxVal;
    91     }
    92     
    93 }

    以上代码是根据作业05代码基础之上更改的更改部分为Find函数。

    运行结果截图:

    002ed

    出现的错误:

    由于循环条件的错误使用导致运行结果总是和数组中的第一个数相同,经过查证原来是将n<=number写成n==number;

    做题总结:

    每一个看似复杂的程序都是在简单程序的基础之上一步步做起来的,所以打好基础是非常重要的。

    ---恢复内容结束---

  • 相关阅读:
    asp 后台批量管理程序
    面经
    单例模式(singleton)解析例子
    互联网产品经理必读书籍
    Struts2中的OGNL表达式
    阿里巴巴面经
    Servlet/JSP如何控制页面缓存于squid中
    Java陷阱一箩筐面试题集及解答
    阿里巴巴笔经http://bbs.yingjiesheng.com/forum.php?mod=viewthread&tid=696098&extra=page%3D1%26filter%3Dtypeid%26typeid%3D6356%26typeid%3D6356
    阿里巴巴java笔试
  • 原文地址:https://www.cnblogs.com/aishangtaxuefeihong/p/5378316.html
Copyright © 2011-2022 走看看