• 结对开发---环


    (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)合作照:

  • 相关阅读:
    VBScript学习笔记
    C#调用C++库知识点
    .Net面试经验,从北京到杭州
    杭州.Net 相关大公司,希望对大家有帮助
    一起学习《C#高级编程》3--运算符重载
    一起学习《C#高级编程》2--比较对象的相等性
    一起学习《C#高级编程》1--类型的安全性
    博客园的第一天
    基于SpringCloud+Kubernetes 微服务的容器化持续交付实战
    第一节:Docker学习 — 安装
  • 原文地址:https://www.cnblogs.com/1305yyf/p/4429598.html
Copyright © 2020-2023  润新知