结对开发四------求一维无头数组最大子数组的和
一、代码思想
对第一次一维数组的延伸,增加无头无尾功能,我们的设计思想是每比较一次进行一次交换,将第一个掉到位后去第二个调到第一个,第三个调到第二个,以此类推,再进行实验一的求最大子数组的和
二、代码
package com.minirisoft; import java.util.*; public class SuperMax { public static int Exchange(int arr[],int n) { int t; for(int j=0;j<n-1;j++) { t=arr[j]; arr[j]=arr[j+1]; arr[j+1]=t; } return 0; } public static void main(String[] args) { Scanner sc=new Scanner(System.in); int[] list = new int[10];//输入数组是必须先定义数组,否则出错! int[] arr1 = new int[10];//输入数组是必须先定义数组,否则出错! int[] arr = new int[10];//输入数组是必须先定义数组,否则出错! System.out.println("请输入数组:"); for(int k=0;k<10;k++) { list[k]=sc.nextInt(); } for(int i=0;i<10;i++) { Exchange(list,9); for(int n=0;n<9;n++) { arr1[n]=list[n]; for(int m=n;m<9;m++) { arr1[m+1]=arr1[m]+list[m+1]; } for(int m=n;m<10;m++) { if(arr1[m]>arr1[n]) { arr1[n]=arr1[m]; } } System.out.println("从第"+(n+1)+"个元素辐射的最大子数组的和为"+arr1[n]); } arr1[9]=list[9]; for(int l=0;l<10;l++) { if(arr1[l]>arr1[0]) { arr1[0]=arr1[l]; } } arr[i]=arr1[0]; System.out.println("此时最大子数组的和为"+arr1[0]); } for(int i=0;i<10;i++) { if(arr[i]>arr[0]) { arr[0]=arr[i]; } } System.out.println("最终最大子数组的和为"+arr[0]); } }
三、实验结果
五、心得体会
这次程序是对原来程序的扩展,主要的设想在如何让数组位置轮转,起初我们俩个都有自己的实现方法,我们都一一试了,最后选择的容易实现的方法。
六、小组成员:杨广鑫,郭健豪