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

    合作照片:

    设计思想:

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

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

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

    结果截图:

     

    总结体会:

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

  • 相关阅读:
    java多线程的基本介绍
    Fragment基本介绍
    TypedValue.applyDimension的使用
    获取当前进程名并判断是否是主进程
    Bitmap类、BitmapFactory及BitmapFactory类中的常用方法
    Android 动态改变图片的颜色值
    Glide4.0使用
    Android在一个app中启动另一个App
    使用Recyclerview实现图片水平自动循环滚动
    Java变量的修饰符
  • 原文地址:https://www.cnblogs.com/yanyuqing/p/5399045.html
Copyright © 2011-2022 走看看