题目ID:L1-025 分数:15分 语言:Java / Python
题目描述
本题的目标很简单,就是求两个正整数 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
? + ? = ?
解题思路
判断一个字符串是否为正整数的规则:
- 字符串全部由数字组成(不含小数点等其他字符)
- 数值在 [1, 1000] 范围内(即
1 <= Integer.parseInt(s) <= 1000)
实现步骤:
- 读取整行,用第一个空格分割得到 A 和 B
- 分别判断 A 和 B 是否为正整数
- 根据判断结果决定输出内容
Java 中的特殊处理:
- 用
split(" ", 2)只分割第一个空格,因为输入可能有多个空格 - 用正则
.matches("\\d+")判断是否为纯数字
Python 中的处理:
- 用
s.split(" ", 1)只分割第一个空格 - 用
str.isdigit()判断是否为纯数字
代码实现
Java
import java.io.*;
import java.util.*;
public class Main {
public static boolean isValid(String s) {
if (s == null || s.isEmpty()) return false;
// 必须全为数字
if (!s.matches("\\d+")) return false;
// 必须在 1~1000 范围内
int v = Integer.parseInt(s);
return v >= 1 && v <= 1000;
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
String[] parts = line.split(" ", 2);
String A = parts[0];
String B = parts.length > 1 ? parts[1] : "";
boolean validA = isValid(A);
boolean validB = isValid(B);
if (validA && validB) {
System.out.println(A + " + " + B + " = " + (Integer.parseInt(A) + Integer.parseInt(B)));
} else {
String outA = validA ? A : "?";
String outB = validB ? B : "?";
System.out.println(outA + " + " + outB + " = ?");
}
}
}
Python
line = input().strip()
# 只分割第一个空格
parts = line.split(" ", 1)
A = parts[0]
B = parts[1] if len(parts) > 1 else ""
def is_valid(s):
if not s:
return False
if not s.isdigit():
return False
v = int(s)
return 1 <= v <= 1000
valid_A = is_valid(A)
valid_B = is_valid(B)
if valid_A and valid_B:
print(f"{A} + {B} = {int(A) + int(B)}")
else:
out_A = A if valid_A else "?"
out_B = B if valid_B else "?"
print(f"{out_A} + {out_B} = ?")
运行验证
样例1
输入:123 456
- A="123" 是正整数 ✓,B="456" 是正整数 ✓
- 输出:
123 + 456 = 579✓
样例2
输入:22. 18
- A="22." 含非数字字符 → 无效
- B="18" 是正整数 ✓
- 输出:
? + 18 = ?✓
样例3
输入:-100 blabla bla...33
- A="-100" 含负号 → 无效
- B="blabla bla...33" 含非数字字符 → 无效
- 输出:
? + ? = ?✓
复杂度分析
- 时间复杂度:O(L),L 为输入行长度
- 空间复杂度:O(1)
总结
本题考察字符串解析和合法性判断,关键是理解"第1个空格作为分隔"的规则,以及正整数的判断条件(全为数字且在1~1000范围内)。