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


    合作照片:

    设计思想:

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

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

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

    结果截图:

     

    总结体会:

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

  • 相关阅读:
    第二次
    第一次
    win下less自动编译脚本
    厦门攻略游记
    npm常用命令
    青岛旅行规划及玩后感
    kissynode run on windows解决方案,contextify nodejs windows solution
    win nodejs下 findit只返回第一个文件问题
    jetty自动添加path的问题
    微博输入框统计
  • 原文地址:https://www.cnblogs.com/yanyuqing/p/5399045.html
Copyright © 2020-2023  润新知