排序三个数后建立 A/B/C 到小中大值的映射,再按给定顺序输出。
OJ: luogu
题目 ID: P4414
难度:入门
标签:python入门排序字典
日期: 2026-07-15 18:17
题意
给出三个数,它们分别是 A < B < C 的某种乱序排列。第二行给出由 A/B/C 组成的输出顺序,要求按这个顺序输出对应数字。
思路
先排序三个数,得到小、中、大。然后建立映射:
A -> 最小值B -> 中间值C -> 最大值
最后遍历顺序字符串,输出对应的数字。
brute.py 不适合这题,因为排序和映射就是完整解法。
Python 知识
sorted(...)把三个数排成升序。- 字典
named可以保存字符到数字的映射。 print(*(named[ch] for ch in order))用星号展开生成器,空格分隔输出多个值。
对应的本地 Python 笔记:
/home/rainboy/mycode/hugo-blog/content/program_language/python/sorting_and_ordering.md:sorted的用法。/home/rainboy/mycode/hugo-blog/content/program_language/python/collections_toolkit.md:字典保存键到值的映射。/home/rainboy/mycode/hugo-blog/content/program_language/python/oj_input_output_cheatsheet.md:输出数组。
代码
python
values = sorted(map(int, input().split()))
order = input()
named = {
"A": values[0],
"B": values[1],
"C": values[2],
}
print(*(named[ch] for ch in order), end="")cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-07-27 00:00
* update_at: 2026-07-27 00:00
*/
#include <bits/stdc++.h>
using namespace std;
int main() {
int a[3]; // 三个数
cin >> a[0] >> a[1] >> a[2];
// 排序为 a[0]<=a[1]<=a[2],对应 A(最小) B(中间) C(最大)
if (a[0] > a[1]) swap(a[0], a[1]);
if (a[1] > a[2]) swap(a[1], a[2]);
if (a[0] > a[1]) swap(a[0], a[1]);
char order[4]; // 输出顺序字符串,如 "ABC"
cin >> order;
for (int i = 0; order[i] != '\0'; i++) {
if (i > 0) cout << " "; // 空格分隔
if (order[i] == 'A') {
cout << a[0];
} else if (order[i] == 'B') {
cout << a[1];
} else {
cout << a[2];
}
}
cout << endl;
return 0;
}Pythonic 写法
match-case + print*:
python
a, b, c = sorted(map(int, input().split()))
order = input().strip()
out = []
for ch in order:
match ch:
case "A":
out.append(a)
case "B":
out.append(b)
case "C":
out.append(c)
print(*out, end="")match-case 写法
输出顺序中的 A/B/C 可用 match ch 映射到已排序的小中大:
python
a, b, c = sorted(map(int, input().split()))
order = input().strip()
out = []
for ch in order:
match ch:
case "A":
out.append(a)
case "B":
out.append(b)
case "C":
out.append(c)
print(*out, end="")复杂度
只处理三个数,时间复杂度
总结
当题目给出符号顺序时,可以先把符号映射到实际值,再按顺序查表输出。字典能让这种对应关系很清楚。