zoukankan      html  css  js  c++  java
  • 一个整形数组中最大值求和问题(3)

    新要求:

    在“一个整形数组中最大值求和问题(2)”的基础之上,加入了新要求。

    将一位数组变成环形数组。

    首先在自己看到这道题目的时候,并没有什么思路,然后老师一点一点的旁敲侧击,自己又在纸上动手画了画,最后自己实现了这个项目。值得说明的一点是,自己虽然能够实现,但是当与同学们上台分享时,并没有很好的表达出自己的意思,一方面,自己的语言表达能力还很欠缺,在日后的学习生活中要有意识地去改善这一方面。另一方面,自己地逻辑思维不是很清晰,正如主任所说的那样“这只是一个小小地项目都没能很好的表达出自己,那上百行地大项目,更说不出来,也做不出来了。”自己地逻辑思维能力,也要逐步提高。

    设计思想:

    环形数组,则程序需要在源程序的基础之上,加入实现最后一个数加开头数地想法,即实现n->(n-1)的计算。

    首先在原代码基础之上,加入变量a(用来表示数组的长度,由于数组从0开始表示,故赋初值-1),然后当数组遍历完成一次之后,将已有的sum值与(sum+c[0])、a与数组长度n两两进行比较,两个条件都满足时,才执行,将已有的sum值接着从头开始相加的代码,且每执行一次,均需判断a与数组长度的关系。一但a大于等于数组长度n,则跳出循环,此时的f为子数组和的最大值。

    实验截图:

    源代码:

    import java.util.Scanner;
    
    public class sum02 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入数组的长度为:");
            int n=sc.nextInt();
            int[] c = new int[n];
            System.out.println("请输入"+n+"个整数");
            for(int i=0;i<n;i++)
            {
                c[i] = (int) sc.nextLong();
            }
            
            int a=-1;//a值用来表示子数组的长度
            int f=0;//定义整形变量f,为子数组最大值
            int sum=0;//定义整形变量sum,为子数组求和
            for(int i=0;i<n;i++)
            {
                sum = sum+c[i];
                if(sum < 0)
                {
                    sum=0;
                }
                if(sum > f)
                {
                    f = sum;
                }
                a=a+1;
            }
            
            //System.out.println(a);
            if( a<n && (f+c[0])>f) {
                for(int i=0;i<n;i++)
                {
                    sum = sum+c[i];
                    if(sum < 0)
                    {
                        sum=0;
                    }
                    if(sum > f)
                    {
                        f = sum;
                    }
                    a=a+1;
                    if(a >= n) {
                        break;
                    }
                }
            }
            
            if(sum == 0)
            {
                for(int i=0;i<n;i++)
                {
                    if(i == 0)
                    {
                        f = c[i];
                    }
                    if(f < c[i])
                    {
                        f = c[i];
                    }
                }
            }
            
            System.out.println("该数组的子数组之和的最大值为:"+f);
    
        }
    
    }
  • 相关阅读:
    Python基础:28正则表达式
    Remove Duplicates from Sorted Array
    Reverse Nodes in k-Group
    Merge k Sorted Lists
    Generate Parentheses
    Container With Most Water
    Regular Expression Matching
    Median of Two Sorted Arrays
    sql 子查询
    linux安装服务器
  • 原文地址:https://www.cnblogs.com/Qi77/p/10596235.html
Copyright © 2011-2022 走看看