蓝桥杯真题【15.小蓝的图书馆】(详解讲解版!!!)
一、问题描述
小蓝是一个热爱阅读的年轻人,他有一个小型图书馆。为了能够管理他的书籍库存,他需要一个程序来记录图书的信息并执行两种操作:添加图书 add 和查找作者 find。
初始小蓝没有书,给出 nn 个操作。addadd 操作给出两个字符串bookname,author、bookname,author,表示添加的图书图书名和作者;find 操作给出一个字符串 author,你需要输出小蓝的图书馆里这个 author有多少本图书。
输入格式
第一行一个整数 nn,表示有 nn 个操作。
之后 nn 行,给出操作及后面的参数,如题所述。
给出的字符串长度 lenlen 不超过 1010。
输出格式
对每一个 find操作,你需要输出这个作者在小蓝的图书馆有多少本书,注意是书的数量,不是不同书的数量,同时不同作者可能出现同名的书。
样例输入
7
find author1
add book1 author1
find author1
add book1 author1
find author1
add book1 author2
find author2
样例输出
0
1
2
1
代码逻辑解释
1. 初始化
- Scanner scan:用于读取输入。
- int num:读取操作次数。
- Map<String, Integer> map:使用 HashMap 存储每个作者的计数,键是作者名,值是计数。
2. 主循环
-
循环 num 次,每次处理一个操作。
-
读取第一个字符串
operation
,判断操作类型:
-
如果是
“s_find”
:
- 读取作者名 s_author。
- 输出 map.getOrDefault(s_author, 0),即该作者的计数(不存在则为 0)。
-
否则(假设是添加操作):
- 跳过一个字符串(可能是 “s_add” 或其他操作标识)。
- 读取作者名 s_author。
- 更新计数:map.getOrDefault(s_author, 0) + 1,然后存回 map。
-
3. 结束
- 关闭 Scanner。
二、具体代码
import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < num; i++) {
String operation = scan.next();
if (operation.equals("find")) {
String s_author = scan.next();
System.out.println(map.getOrDefault(s_author, 0));
} else {
scan.next();
String s_author = scan.next();
map.put(s_author, map.getOrDefault(s_author, 0) + 1);
}
}
scan.close();
}
}
三、后记
笔者在完成时,遇到了如下问题,以此记录下来
- String 输入是 使用next();
- 字符串判断使用 s.equals