L1-002 打印沙漏 (20 分) JAVA 测试点2问题

  今天做算法题的时候碰到了“打印沙漏”这道题,我使用java写的代码,在最后测试的时候,我尝试了所有我能想到的测试点,但是测试点2仍然过不去,于是去百度,发现这道题目测试点2的坑(用户输入的数小于7的时候)我在做题的时候就已经考虑过了,并且我的代码能够正确地实现相关功能。最后我在代码中做了一些改动,将用户输入小于7的整数时的情况进行强制输出才通过了程序,求大佬能帮我解答一下我这样写为什么没法通过,谢谢。下面是题目要求和我的源代码。

 

 我的源代码(测试点2不通过):

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int length = sc.nextInt();  //length为给定大小
        String s = sc.next();       //s为指定符号
        //System.out.println(s);
        if(length <= 0)
        {
            System.out.println(s);
               System.out.println(length-1);
            return;
        }
        int i = 2;
        int j = 1;  //设立一个旗帜,控制+2这个事件的时间复杂度
        int count = 0;//判断加的次数
        int sum = 1;
        if(length == 1)
        {
            System.out.println(s);
        }
        else{
            for(;sum <= length;i++)
            {
                j += 2;
                //System.out.println("j" + j);
                sum += j*2;
                count++;
                if(sum>length)
                {
                    sum -= j*2;
                    break;
                }
                //System.out.println("i" + i);
                //System.out.println("sum" + sum);
            }
            //System.out.println("count" + count);
            //System.out.println("sum" + sum);
        }
        int m = count;
        for(;count>0;count--)
        {
            for(int temp = m-count; temp > 0;temp--)
                System.out.print(" ");
            for(int k = 0;k < (count*2-1);k++)
            {
                System.out.print(s);
            }
            if(count!=0)
            System.out.println("");
        }
        for(int k = 2;k <= m;k++)
        {
            for(int temp = m-k; temp > 0;temp--)
                System.out.print(" ");
            for(int l = 0;l < (k*2-1);l++)
                System.out.print(s);
            System.out.println("");
        }
        if(length-sum != 0)
            System.out.print(length-sum);
    }
}

我的问题:

将红色片段的代码修改为如下代码的时候就才可以通过测试点2,但是我不修改此条件的情况下我的测试样例与修改后的一致。

这究竟是我解题时的考虑欠妥,还是在PTA上用java进行做题时偶尔会碰到的问题呢?

if(length <= 7)  //只修改这一个条件,其他不需要任何变动。
        {
            System.out.println(s);
               System.out.println(length-1);
            return;
        }

修改之前代码的测试样例:

 

修改之后的测试样例:

 

posted @ 2022-03-14 19:48  闫闫不是那个严  阅读(187)  评论(0编辑  收藏  举报