团队天梯赛L1-016 查验身份证 (15 分)
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情。
1、题目📑
题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。
输入格式:
输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。
注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。
输出格式:
如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?。
输入样例1:
123 456
输出样例1:
123 + 456 = 579
输入样例2:
22. 18
输出样例2:
? + 18 = ?
输入样例3:
-100 blabla bla...33
输出样例3:
? + ? = ?
2、思路🧠
方法:
以空格分为两个字符串,然后匹配一下两个字符串是否为正整数,这里需要通过 nextLine() 来进行输入,关键在于找到第一个空格的位置,将第一个空格后面的字符串进行在处理,本题关键在于对特殊情况的处理,需要考虑到 [a,b] 两个数字的范围为 [1,1000] ,本题自己写的代码有一点小小的问题,只过了11分的样例。
废话少说~~~~~上代码!
3、代码👨💻
第一次commit AC
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String s [] = str.split("\\s+");
boolean flagA = true,flagB = true;
if (s.length > 2) {
System.out.println("? + ? = ?");
}else {//s.length <=> 2
char ca[] = s[0].toCharArray();
char cb[] = s[1].toCharArray();
for (Character c:
ca) {
if (!Character.isDigit(c)) {
flagA = false;
}
}
for (Character c:
cb) {
if (!Character.isDigit(c)) {
flagB = false;
}
}
if (flagA && flagB) {
int a = Integer.parseInt(s[0]);
int b = Integer.parseInt(s[1]);
System.out.print((a > 1000 || a <1) ? "?" : a);
System.out.print(" + ");
System.out.print((b > 1000 || b <1) ? "?" : b);
System.out.print(((a <= 1000 && a >= 1) && (b <= 1000 && b >= 1)) ? " = " + (a + b) : " = ?");
}
if (flagA && !flagB) {
int a = Integer.parseInt(s[0]);
System.out.println(a + " + ? " + "= ?");
}
if (!flagA && flagB) {
int b = Integer.parseInt(s[1]);
System.out.println("? + " + b + " = ?");
}
if (!flagA && !flagB) {
System.out.println("? + ? = ?");
}
}
}
}
能想到的测试用例都测了还是不清楚自己哪里错了😭😭😭
4、总结
该题目的是对题目信息的解读,考察阅读能力,以及提出功能,对于功能的实现能力。如果测试用例无法通过,还是要仔细地阅读题目找出问题的关键信息。
原题链接:题目详情 - L1-025 正整数A+B (15 分) (pintia.cn)
❤️来自专栏《LeetCode基础算法题》欢迎订阅❤️
厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。
对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!