zoukankan      html  css  js  c++  java
  • 返回一个一维整数数组中最大子数组的和2

    题目:

    返回一个一维整数数组中最大子数组的和。

    要求: 输入一个一维整形数组,数组里有正数也有负数。 一维数组首尾相接,象个一条首尾相接带子一样。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。

    设计思想:

    (1)存在三个一维数组。第一个用于存储 输入的数组;第二个用于存储不同子数组的最大值;第三个用于存储 起始点不同的数组的最大值。

    (2)1、定制输入整数的个数

           2、创建第一个一维数组,将数字输入

           3、 利用循环,将所存在的第一个数组的数,进行加法计算,如果和为正数,继续计算;若和为负数,则下一个重新开始计算。所有计算结果放在第二个一维数组中,将第二个数组中,求最大值,放入第三个数组。

           4、在第一个数组中,不同的位置为 计算开始,重复进行 3 。

           5、求出第三个数组的最大值。输出

    源代码:

    import java.util.Scanner;
    public class CircleShuzu
    {
        public static void main(String args[])
        {    
            Scanner shu=new Scanner(System.in);
            System.out.println("请输入整数的个数:");
            int count=shu.nextInt();
            while(count<=0)
            {
                System.out.println("输入错误,请重新输入:");
                count=shu.nextInt();
            }
            int Array[]=new int[count];
            int Crray[]=new int[count];
            System.out.println("请输入整数");
            for(int i=0;i<count;i++)
            {
                Array[i]=shu.nextInt();
            }
            
        for(int j=0;j<count;j++)
        {
            int b=1;
            int Brray[]=new int[100];
            Brray[0]=Array[j];
            if(j==count-1)
            {
                for(int i=0;i<count-1;i++)
                {
                    if(Brray[b-1]<=0)
                    {
                        Brray[b]=Array[i];
                    }
                    if(Brray[b-1]>0)
                    {
                        Brray[b]=Brray[b-1]+Array[i];
                    }
                    if(i==j-1)
                    {
                        break;
                    }
                    b++;
                }
            }
            for(int i=j+1;i<count;i++)
            {
                if(Brray[b-1]<=0)
                {
                    Brray[b]=Array[i];
                }
                if(Brray[b-1]>0)
                {
                    Brray[b]=Brray[b-1]+Array[i];
                }
                if(i==count-1)
                {
                    i=-1;
                }
                if(i==j-1)
                {
                    break;
                }
                b++;
            }
            int Max1=Brray[0];
            for(int i=1;i<count;i++)
            {
                if(Brray[i]>Max1)
                {
                    Max1=Brray[i];
                }
            }
            Crray[j]=Max1;
        }
        int Max2=Crray[0];
        for(int m=1;m<count;m++)
        {
            if(Crray[m]>Max2)
            {
                Max2=Crray[m];
            }
        }
        System.out.println("数组最大值为:"+Max2);
        }
    }

    结果截图:

    合作过程体会:

    通过讨论,我们在之前的题进行了改进,之前的题我们用的是二维数组,这次我们用多个一维数组来解决问题,进一步从不同首项遍历,选取最大值就行了。

    两人一起分析程序,我编写代码,王艺霖复审,遇到错误,共同解决。

    冲突解决:

    当首项为最后一个数时,跳过了之前设计的循环,从而导致错误。所以给最后的首相列出了单独的计算。

    总结:

    两次设计思想差不多。有所改变的是将二维数组改为一维数组,多个数组来储存所需要的值。合作开发能高效率地解决一些问题,方向能够更准确。

  • 相关阅读:
    吉林1号整理
    easyUI的常见属性
    Windows7配置IIS时出现Default Web Site上怎么多了个问号或者右键浏览浏览器没有反应
    安装IIS后,应用程序池找不到相应的.net版本
    JS遍历对象里面有什么内容
    ASPX 页面可以从后台直接传递值到前端。
    datagridview相关
    sqlserver 同字段值拼接 列转行
    ASP.NET中Request.RawUrl、Request.Url的区别Path.GetFileName、Path.GetExtension、Path.GetDirectoryName
    SQLserver 行变列。
  • 原文地址:https://www.cnblogs.com/maplely/p/5396090.html
Copyright © 2011-2022 走看看