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; }
修改之前代码的测试样例:
修改之后的测试样例: