结对开发四--首尾相连得数组的最大子数组的和

一、设计思路

  根据上一个结对开发的基础上,将数组的首尾可以连接起来,组成一个首尾相联的数组,也就是说,每一个元素都能当作是数组的第一个元素,

因此,就可以根据有几个元素,就定义几个数组,让每一个元素都能成为元素的第一个元素,来得出每一个数组的最大子数组的和,那么怎么构造

每一个数组呢?

  可以用冒泡交换,就是根据冒泡排序的原理,将数组的最后一个元素转移到数组的第一个元素的位置,然后就得到了目标数组,算出最大值。

二、源代码

 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 }

三、运行截图

四、心得体会

  这次实验实际上就是对上次的实验做了次升级,主要思想就是怎么构造这个首尾相联的数组,在思考的过程中,和队友都有自己的方法,并将其都进行了实验,最后决定用“冒泡交换”的方法,将其实现,如果想到更好的方法,还会对其做出改进。

五、有图为证

原文地址:https://www.cnblogs.com/KevinBin/p/4378771.html