结对开发---环

(1)源代码:

  1 package ruanjian;
  2 
  3 import java.util.Random;
  4 import java.util.Scanner;
  5 
  6 public class test3 {
  7     
  8     public static void main(String[] args) {
  9         // TODO Auto-generated method stub
 10         int N=20;
 11         int n=-20;
 12         int m=20;
 13         int a[]=new int[N];
 14         
 15         Input(a,N,n,m);   //随机产生a[N]
 16         System.out.println("数组a[N]为:");
 17         for(int i=0;i<N;i++)     //输出数组a[N]
 18         {
 19             System.out.print(a[i]+" ");
 20         }
 21         System.out.println();
 22         
 23         int H[]={a[0],0,0};
 24         for(int i=1;i<=N;i++)    //求最大子数组和
 25         {
 26             array(a,N);
 27             Maxarray(H,3,a,N,i);
 28         }
 29         
 30         System.out.println("最大子数组为:");
 31         if(H[1]>H[2])
 32         {
 33             for(int i=H[1];i<N;i++)
 34             {
 35                 System.out.print("a["+i+"]  ");
 36             }
 37             for(int i=0;i<=H[2];i++)
 38             {
 39                 System.out.print("a["+i+"]  ");
 40             }
 41         }
 42         else if(H[1]==H[2])
 43         {
 44             System.out.print("a["+H[1]+"]  ");
 45         }
 46         else
 47         {
 48             for(int i=H[1];i<=H[2];i++)
 49             {
 50                 System.out.print("a["+i+"]  ");
 51             }
 52         }
 53         System.out.println();
 54         System.out.println("最大子数组和为:"+H[0]);
 55         
 56     }
 57     
 58     static void Input(int a[],int N,int n,int m)   //随机产生数组a[N]
 59     {
 60         for(int i=0;i<N;i++)
 61         {
 62             a[i]=(int)(n+Math.random()*(m-n+1));
 63         }
 64     }
 65     
 66     static void array(int a[],int N)     //把数组第一个数放到最后,重新排列数组
 67     {
 68         int q=a[0];
 69         for(int i=0;i<N-1;i++)
 70         {
 71             a[i]=a[i+1];    
 72         }
 73         a[N-1]=q;
 74     }
 75     
 76     static void Maxarray(int H[],int L,int a[],int N,int m)   //对数组求最大子数组,并记录它的最大子数组和,和数组的起始位置
 77     {
 78         int Max=a[0];
 79         int A=a[0];
 80         int b=0;
 81         int c=0;
 82         int d=0;
 83         for(int i=1;i<N;i++)
 84         {
 85             if(A<0)
 86             {
 87                 A=a[i];
 88                 if(Max<A)
 89                 {
 90                     Max=A;
 91                     b=i;
 92                     c=i;
 93                     d=b;
 94                 }
 95                 else
 96                 {
 97                     b=i;
 98                 }
 99             }
100             else
101             {
102                 if(a[i]<0)
103                 {
104                     if(Max<A)
105                     {
106                         Max=A;
107                         c=i-1;
108                         d=b;
109                     }
110                     A=A+a[i];
111                 }
112                 else
113                 {
114                     A=A+a[i];
115                     if(Max<A)
116                     {
117                         Max=A;
118                         c=i;
119                         d=b;
120                     }
121                 }
122             }
123         }
124         if(H[0]<=Max)
125         {
126             H[0]=Max;
127             if((d+m)<N)
128             {
129                 H[1]=d+m;
130             }
131             else
132             {
133                 H[1]=d+m-N;
134             }
135             if((c+m)<N)
136             {
137                 H[2]=c+m;
138             }
139             else
140             {
141                 H[2]=c+m-N;
142             }
143         }
144     }
145 }

(2)截图:

(3)设计思路:

一维数组环型求最大值,先按一维数组的设计思路,逐个相加,当和为负数时从后面数组重新开始计算,此次每次求出值后将第一个值移至最后一个值,重新再计算一次求最大值,并与之前值比较并记录,利用调用函数。因为题目要求数组首尾相邻,允许输出A[i-1]...A[n-1],A[0]...A[j-1]之和最大,所以定义了一个n为数组,(1)从第二个整数开始到第n个整数依次向前移一位,原来第一位的整数放到最后一位,形成新的数组,(2)求新数组的最大子数组和,然后重复(1)直至循环n次,最后一个数组与初始数组相等。求最大子数组和的方法为:从第一个数(判断第一个数的正负,若负舍去,看下一个数,若正继续)开始把数组(没加一个数,都要对此数判断正负,若负,把之前的值当作最大值储存起来,再继续,若正,继续 )相加,每加一个数对和进行判断,如果小于零,抛弃当前值,如果大于零,下一个数与零比较,小于零时,先将最大值与之前的和比较,在让和加上这个数,如果大于零,直接让和加上这个数,再取最大值和和之间的最大值。(未完成时间复杂度为O(n)的要求)。

(4)结对开发:

在本次结对开发中,互换角色,我负责对程序的测试,王欣欣负责对程序的编程。

(5)合作照:

原文地址:https://www.cnblogs.com/1305yyf/p/4429598.html