结对编程之子数组最大的和(由于一直登不上我的账号,在规定日期内只在我搭档的博客上交了)

时间:2022-12-15 07:58:44

合作照片:

结对编程之子数组最大的和(由于一直登不上我的账号,在规定日期内只在我搭档的博客上交了)

设计思想:

      在原程序的基础上,再加一个循环,循环从最后一位数开始,到它之前的数结束;

可以将最后一位数赋给第一个数,剩下的数依次向前进一位;

      计算方法和上次相同,每次循环都加上相邻的数,比较是否小于0,若小于0则将和的值赋为0,从下一位重新开始相加;若大于最初的最大值,则将和的值赋给最大值;

      上次程序实现了首尾不连接的最大值,这次循环实现首尾连接的最大值,后再比较两次最大值,返回其中最大的值。

合作过程:

     首先,两人在一起对编程题目进行讨论,发表自己的见解,并且对上次的编程进行回顾总结,对上次的思路进行整理,将这次程序进行完善。

源程序代码:

结对编程之子数组最大的和(由于一直登不上我的账号,在规定日期内只在我搭档的博客上交了)
//求数组中子数组和的最大值
import java.util.Scanner;
public class Test3{
  public static void main(String[] args){
      int N=3;
      int list[]=new int [N];
      //创建一个新数组
      Scanner in=new Scanner(System.in);
      int i;
      System.out.println("请输入数组:");
      for(i=0;i<N;i++)
      {
          list[i]=in.nextInt();
      }
      max_ l=new max_();
      System.out.print("子数组最大的和为:  "+l.max_(list,N));
      //调用函数
      in.close();
  }
}
class max_
{
    int max_(int list[],int length)
    {
        int i;
        int max;
        int lmax1=0;
        int lmax2=0;
        int max1=list[0];
        //设最大值为list[0]
        for(i=0;i<length;i++)
        {
            lmax1+=list[i];
            if(lmax1>max1||lmax1==max1)
            {
                max1=lmax1;
            }
            if(lmax1<0)//若小于0,则从后一个数开始加和
            {
                lmax1=0;
                if(max1<list[i]||max1==list[i])
                {
                    max1=list[i];
                }
            }
            //若数组全为负数,求最大值
        }
        //实现首尾相接,求最大值
        int sum;
        sum=list[length-1];
        for(i=0;i<length-1;i++)
        {
            list[i+1]=list[i];
        }
        list[0]=sum;
        int max2=list[0];
        for(i=0;i<length;i++)
        {
            lmax2+=list[i];
            if(lmax1>max2||lmax1==max2)
            {
                max2=lmax2;
            }
            if(lmax2<0)//若小于0,则从后一个数开始加和
            {
                lmax2=0;
                if(max2<list[i]||max2==list[i])
                {
                    max2=list[i];
                }
            }
            //若数组全为负数,求最大值
        }
        if(max1>max2)
        {
            max=max1;
        }
        else
            max=max2;
        return max;
    }
}
结对编程之子数组最大的和(由于一直登不上我的账号,在规定日期内只在我搭档的博客上交了)

结果截图:

结对编程之子数组最大的和(由于一直登不上我的账号,在规定日期内只在我搭档的博客上交了)

 

结对编程之子数组最大的和(由于一直登不上我的账号,在规定日期内只在我搭档的博客上交了)

结对编程之子数组最大的和(由于一直登不上我的账号,在规定日期内只在我搭档的博客上交了)

总结体会:

      两次程序的设计思想是基本相同的,我们只需要在原程序的基础上加一个循环求得首尾连接的最大值,再比较出最大值即可。