---恢复内容开始---
在第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;
做题总结:
每一个看似复杂的程序都是在简单程序的基础之上一步步做起来的,所以打好基础是非常重要的。
---恢复内容结束---