1、测试点 2 、3、4
Pat乙级_1019的题目我就不写上来了,大家都有题目,我想要说的就是测试点2、3、4,这个巨坑。
题目上说是 现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。
后面的输入格式又是:输入给出一个?(0,10000)?区间内的正整数?N。
就是这里巨坑,我原本理解的是,它给的测试点的数字都是 4 位的,就没考虑如果一开始给定的数字位数小于 4,这导致我测试点 2、3、4 一直过不去!!!
后来我又仔细的看了题目,终于发现了,于是在开始接收的时候就判断位数,不足添0,就直接满分了。
2、另一个坑点
在运行的过程中,可能会出现 999 的情况,这个时候还要给它补上 0 ,要不然就会出现下标越界的情况,比如说给定数字 1112,2111-1112=999,这个时候就要补 0 了
最后附上本人的代码,若是超时多提交几次,我现在是可以得到满分——Java是真的容易超时,不适合做算法题,但是我还是要说
Java 是世界上最好的语言!!!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
/**
* @ClassName Main
* @Description TODO 数字黑洞——我有预感这道题又会超时,很烦
* @date 2021/8/21 17:35
* @Author ZY
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputNum = br.readLine();
while (inputNum.length() != 4){
inputNum = "0" + inputNum;
}
// 直接将String类型拆分成Character数组
Character[] characters = new Character[4];
characters[0] = inputNum.charAt(0);
characters[1] = inputNum.charAt(1);
characters[2] = inputNum.charAt(2);
characters[3] = inputNum.charAt(3);
if (characters[0]==characters[1]&&characters[0]==characters[2]&&characters[0]==characters[3]){
System.out.println(inputNum + " - " +inputNum + " = " + "0000");
return;
}
String flag = "";
while (!"6174".equals(flag)){
String[] action = action(characters);
System.out.println(action[0] + " - " + action[1] + " = " + action[2]);
flag = action[2];
}
}
public static String[] action(Character[] characters){
String[] nums = new String[3];
// 升序
Arrays.sort(characters);
String num1= String.valueOf(characters[0])+String.valueOf(characters[1])
+String.valueOf(characters[2])+String.valueOf(characters[3]);
// 降序
Arrays.sort(characters,Collections.reverseOrder());
String num2= String.valueOf(characters[0])+String.valueOf(characters[1])
+String.valueOf(characters[2])+String.valueOf(characters[3]);
// 相减
String num3 = Integer.parseInt(num2)-Integer.parseInt(num1) + "";
while (num3.length()!=4){
num3 = "0" + num3;
}
nums[0] = num2;
nums[1] = num1;
nums[2] = num3;
// 将新的数字键入charters数组
characters[0] = num3.charAt(0);
characters[1] = num3.charAt(1);
characters[2] = num3.charAt(2);
characters[3] = num3.charAt(3);
return nums;
}
}
|