码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-04-16 21:01:38      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

合作照片:

技术分享

设计思想:

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

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

      计算方法和上次相同,每次循环都加上相邻的数,比较是否小于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;
    }
}
技术分享

结果截图:

技术分享

 

技术分享

技术分享

总结体会:

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

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

标签:

原文地址:http://www.cnblogs.com/yanyuqing/p/5399045.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!