问题描述
题目描述
假设你手里有一串钥匙,这串钥匙上每把钥匙都有一个编号,对应着一个房门的编号。现给你一个房门编号,你需要判断是否能够打开该房门。
输入描述
测试数据共有多组。
第一行为一个整数 s,表示共有多少组测试数据。
每组第一行有一个整数 n,表示钥匙串上有多少把钥匙。
后面共有 n 行输入,每行两个整数,第一个整数 k 表示钥匙编号,第二个整数 d 表示房门编号。
最后一行有一个整数 x,表示需要打开的房门编号。
输出描述
输出多组,每组占一行。 如果能打开,则输出钥匙编号,不能打开则输出“Can't open the door.”。
输入示例
2
5
878788 9373833
837837 3837378
378338 3398939
388733 2329389
878373 3938399
3938399
3
998389 3892393
444323 3892783
883782 5334332
8739833
输出示例
878373
Can't open the door.
python解法
s = int(input()) # 读取测试用例的数量
for _ in range(s):
umap = {} # 创建一个空的字典
n = int(input()) # 读取键值对的数量
for _ in range(n):
# 第一个整数表示钥匙好,第二个整数表示房门编号
key, door = map(int, input().split())
umap[key] = door
# 读取需要查找的房门编号
x = int(input())
flag = True
# 遍历字典的键值对
for key, door in umap.items():
# 如果找到匹配的门
if door == x:
print(key) # 输出对应的键
flag = False
break
# 如果没有找到匹配的门,输出对应的语句
if flag:
print("Can't open the door.")
C++解法
#include <iostream>
#include <unordered_map>
int main(){
int s, n, key, door, x;
std::cin >> s;
while (s--){
std::unordered_map<int, int> umap;
std::cin >> n;
while (n--){
// 接收输入的key和door
std::cin >> key >> door;
// 将key和door放入到map中
umap[key] = door;
}
std::cin >> x;
bool flag = true;
// 遍历map
// const 表示kv不可修改,加 & 避免数值赋值,提高值传递效率
for (auto &kv : umap){
// 检查当前键值对中的值是否等于x
if (kv.second == x){
std::cout << kv.first << std::endl;
// 如果找到了匹配的键值对,将键kv.first输出到标准输出,并换行
flag = false;
break;
}
}
if (flag)
std::cout << "Can't open the door." << std::endl;
}
}