PAT 团队天梯赛L1-025 正整数A+B (15 分)

186 阅读3分钟

团队天梯赛L1-016 查验身份证 (15 分)

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

1、题目📑

题的目标很简单,就是求两个正整数AB的和,其中AB都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。

输入格式

输入在一行给出AB,其间以空格分开。问题是AB不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

注意:我们把输入中出现的第1个空格认为是AB的分隔。题目保证至少存在一个空格,并且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("? + ? = ?");
            }
        }
    }
}

能想到的测试用例都测了还是不清楚自己哪里错了😭😭😭

image-20220419151027867

4、总结

该题目的是对题目信息的解读,考察阅读能力,以及提出功能,对于功能的实现能力。如果测试用例无法通过,还是要仔细地阅读题目找出问题的关键信息。

原题链接:题目详情 - L1-025 正整数A+B (15 分) (pintia.cn)

❤️‍来自专栏《LeetCode基础算法题》欢迎订阅❤️‍

厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。

对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!

原题链接:题目详情 - L1-016 查验身份证 (15 分) (pintia.cn)