软件工程作业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("\n\n");
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;

做题总结:

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

 

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

转载于:https://www.cnblogs.com/aishangtaxuefeihong/p/5378316.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值