一、设计思路
根据上一个结对开发的基础上,将数组的首尾可以连接起来,组成一个首尾相联的数组,也就是说,每一个元素都能当作是数组的第一个元素,
因此,就可以根据有几个元素,就定义几个数组,让每一个元素都能成为元素的第一个元素,来得出每一个数组的最大子数组的和,那么怎么构造
每一个数组呢?
可以用冒泡交换,就是根据冒泡排序的原理,将数组的最后一个元素转移到数组的第一个元素的位置,然后就得到了目标数组,算出最大值。
二、源代码
1 import java.util.*; 2 public class SuperMax 3 { 4 public static int Exchange(int arr[],int n) 5 { 6 int t; 7 8 for(int j=0;j<n-1;j++) 9 { 10 t=arr[j]; 11 arr[j]=arr[j+1]; 12 arr[j+1]=t; 13 } 14 15 return 0; 16 } 17 public static void main(String[] args) 18 { 19 Scanner sc=new Scanner(System.in); 20 int[] list = new int[10];//输入数组是必须先定义数组,否则出错! 21 int[] arr1 = new int[10];//输入数组是必须先定义数组,否则出错! 22 int[] arr = new int[10];//输入数组是必须先定义数组,否则出错! 23 System.out.println("请输入数组:"); 24 for(int k=0;k<10;k++) 25 { 26 list[k]=sc.nextInt(); 27 } 28 29 for(int i=0;i<10;i++) 30 { 31 Exchange(list,9); 32 for(int n=0;n<9;n++) 33 { 34 //Exchange(list,9); 35 arr1[n]=list[n]; 36 for(int m=n;m<9;m++) 37 { 38 arr1[m+1]=arr1[m]+list[m+1]; 39 } 40 for(int m=n;m<10;m++) 41 { 42 if(arr1[m]>arr1[n]) 43 { 44 arr1[n]=arr1[m]; 45 } 46 } 47 48 } 49 arr1[9]=list[9]; 50 for(int l=0;l<10;l++) 51 { 52 if(arr1[l]>arr1[0]) 53 { 54 arr1[0]=arr1[l]; 55 } 56 } 57 arr[i]=arr1[0]; 58 System.out.println("第"+(i+1)+"个数组的最大子数组的和为"+arr1[0]); 59 } 60 for(int i=0;i<10;i++) 61 { 62 if(arr[i]>arr[0]) 63 { 64 arr[0]=arr[i]; 65 } 66 } 67 System.out.println("最终最大子数组的和为"+arr[0]); 68 } 69 }
三、运行截图
四、心得体会
这次实验实际上就是对上次的实验做了次升级,主要思想就是怎么构造这个首尾相联的数组,在思考的过程中,和队友都有自己的方法,并将其都进行了实验,最后决定用“冒泡交换”的方法,将其实现,如果想到更好的方法,还会对其做出改进。
五、有图为证
时间: 2024-10-26 22:28:25