• 软件工程作业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;

    做题总结:

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

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

  • 相关阅读:
    iTOP-4412开发板低功耗高性能的开源硬件平台——上手评测
    迅为三星Exynos 4412开发板四核Cortex-A9ARM安卓linux开发板
    体验更低功耗的开源硬件平台-迅为4412开发板
    【分享】iTOP-4412开发板使用之初体验[多图]
    【嵌入式开发板】大家都在玩儿的4412开发板
    [POJ] 2965.The Pilots Brothers' refrigerator
    [POJ] 1753.Flip Game
    [HDOJ] 1753.大明A+B (大数加法)
    C++ Primer 第五版 一些遇到的注意点记录。
    [HDOJ] 1172.猜数字
  • 原文地址:https://www.cnblogs.com/aishangtaxuefeihong/p/5378316.html
Copyright © 2020-2023  润新知