点击蓝字 关注我们
今天要做的是来自洛谷网站的P4414 [COCI 2006/2007 #2] ABC。
https://www.luogu.com.cn/problem/P4414
有账号的可以上去做做。
P4414 [COCI 2006/2007 #2] ABC
题目描述
三个整数分别为 A,B,C。这三个数字不会按照这样的顺序给你,但它们始终满足条件:A<B<C。为了看起来更加简洁明了,我们希望你可以按照给定的顺序重新排列它们。
输入格式
第一行包含三个正整数 A,B,C,不一定是按这个顺序。这三个数字都小于或等于 100。第二行包含三个大写字母 A、B 和 C(它们之间没有空格)表示所需的顺序。
输出格式
在一行中输出 A,B 和 C,用一个 (空格)隔开。
输入输出样例



解题思路
输入两行:
第一行:3 个整数(乱序),这三个数从小到大规范定义为 A<B<C;
第二行:连续 3 个大写字母(无空格,仅由 A/B/C 组成),代表输出顺序。
任务:
先把 3 个数字排序,得到:最小 = 规范 A,中间 = 规范 B,最大 = 规范 C;
根据第二行字母序列,依次取出对应数值,按顺序输出,空格隔开。
举例:
数字输入:6 2 9 → 排序后:规范 A=2,规范 B=6,规范 C=9
字母输入:CBA
输出:9 6 2
难点在于如何根据第二行输入识别出输出的顺序,并输出对应的数字。(根据所学水平选择方法)
方法一:用最直白最原始的遍历+判断。(适用于初学者,容易理解)
对第二行输入的字符串进行遍历,再判断当前字符是哪个字母,如果是"A",输出变量a,如果是"B",输出变量b,如果是"C",输出变量c
方法二:利用字典的键值对绑定规则。排序后,将ABC作为键,建立一个字典。
第二行输入后得到一个字符串s,s[0] s[1] s[2]可以获取对应的值,将他们作为键,即可获取字典中对应的值。
方法三:多加一个列表w=[“A”,"B","C"],排序后的3个数字也存在列表num中,先通过w.index(s[0])获得当前字母对应的索引,然后再用这个索引去num列表中获取对应的值。

知识点
字符输入 input() 获取字符串,split()分割字符串,int()转换成整数。
a,b,c=map(int,input().split())
列表的排序:sorted(list1)返回排序后的列表。list1.sort()则直接对原列表进行修改。
字典dict1=["键1":"值1”,"键2":"值2”,"键3":"值3”,获取值:dict1["键"]
不换行输出end=""
"s".join(list1):将列表list1中的元素用字符串s连接起来。如果中间不需要有字符连接,就直接“”.join(list1)

参考代码及解析
方法一:最易懂的方法

1、a,b,c=map(int,input().split()):获取三个数
2、nums=sorted([a,b,c])
a,b,c=nums
对数字排序并重新赋值给abc
3、s=input():输入输出的顺序
4、for i in range(3):i取值0,1,2,作为字符串索引,用于获取字符串s中的值
5、if s[i]=="A":判断字符串是哪个字母
6、print(a,end=""):输出对应的数值,end=""进行不换行输出。
方法二:字典的方法

1、第一行:读取第一行 3 个整数存入列表。
2、第二行:列表从小到大升序排序;
3、第3-7行:构造字典,建立字母和标准大小数字的对应关系。
4、第8行:读取第二行字母字符串,去除首尾多余换行空格。
5、第9行:依次遍历字符串中每个字母,查表得到对应数字,形成结果列表。
6、第10行:print(' '.join(map(str, res)))
数字转为字符串,中间用空格相连,整体打印。
方法三:用2个列表的方法

1、w = ["A", "B", "C"]
模板列表下标和数字列表一一对应:
w [0]="A" ↔ num [0]
w [1]="B" ↔ num [1]
w [2]="C" ↔ num [2]
2、result = []
存放最终要输出的数字。
3、w.index(ch):找到字母 "A"/"B"/"C" 在模板列表 w 中的下标;用这个下标去 num 取出对应大小的数字。
4、print(' '.join(map(str, result)))
转为字符串,空格隔开输出。

如果你觉得意犹未尽,那就趁热打铁,继续挑战一下吧!

1、lst = [9, 3, 5]
lst.sort()
print(lst)
程序输出为()
A. [9,5,3] B. [3,5,9] C. [9,3,5] D. 报错
2、w = ["A","B","C"]
print(w.index("B"))
运行结果是()
A. 0 B. 1 C. 2 D. "B"
点击空白处查看答案
1、答案:B
解析:列表.sort() 默认升序排列。
答案:B
解析:下标从 0 开始,"B" 位于第 1 号位置。