算法应用主题赛 · Python · 共 14 题(5单选+5多选+4编程)· 满分 100 分
blessings = ["如意吉祥", "水", "健康平安幸福", "快乐"]
result = sorted(blessings, key=lambda x: len(x))
print(result)events = ["摔跤", "赛马", "射箭", "套马"]
for i, event in enumerate(events, start=1):
print(f"{i}.{event}", end=" ")activities = ["祭火", "斗牛", "赛马"]
dates = ["六月廿四", "六月廿五", "六月廿六"]
result = list(zip(activities, dates))
print(result)prices = [50, 80, 120, 200]
discount = list(map(lambda x: x * 0.9, prices))
print(discount)count = 0
def build_tower():
global count
count = count + 1
return count
build_tower()
build_tower()
build_tower()
print(count)muqam = [("拉克木卡姆", 120), ("且比亚特木卡姆", 90),
("木夏吾莱克木卡姆", 150), ("恰尔尕木卡姆", 90)]crafts = "熔炼,锻打,錾刻,花丝,镶嵌"patterns = {"龙凤纹": 5, "回字纹": 3, "云雷纹": 2}题目描述:
某民族文化展览会上,主办方收集了n件来自不同民族的手工艺品,希望将这些工艺品两两配对进行联合展示。配对规则是:两件工艺品必须来自不同的民族。请编写程序,找出所有满足条件的不同民族配对组合。
注意:(A, B)和(B, A)被视为同一对,只需要输出一次。
输入格式:
第一行输入一个整数n(1 ≤ n ≤ 100),表示手工艺品的数量。
接下来n行,每行输入一个字符串和一个民族名称,格式为"工艺品名称 民族名称",中间用空格分隔。工艺品名称和民族名称均为不含空格的字符串。
输出格式:
每行输出一对配对,格式为"工艺品A(民族A) - 工艺品B(民族B)"。
所有配对按字符串字典序从小到大排序后输出。若不存在任何配对(如所有工艺品来自同一民族),则不输出任何内容。
示例输入:
示例输出:
n = int(input())
crafts = []
for _ in range(n):
line = input().split()
name = line[0]
ethnicity = line[1]
crafts.append((name, ethnicity))
results = []
# 双层循环,j从i+1开始避免重复配对
for i in range(n):
for j in range(i + 1, n):
if crafts[i][1] != crafts[j][1]: # 不同民族
pair = f"{crafts[i][0]}({crafts[i][1]}) - {crafts[j][0]}({crafts[j][1]})"
results.append(pair)
# 按字典序排序
results.sort()
for pair in results:
print(pair)
题目描述:
苗族银饰工匠在设计新款银饰时,需要从若干种传统图案中选出恰好k种图案进行搭配。给定n种候选图案的名称,请你编写程序,输出所有可能的k种图案组合(不考虑图案的先后顺序,即"A B"和"B A"视为同一种组合)。
输入格式:
第一行输入两个整数n和k(2 ≤ k ≤ n ≤ 10),用空格分隔,表示候选图案数量和需要选取的数量。
第二行输入n个字符串(均为不含空格的图案名称),用空格分隔。
输出格式:
每行输出一种组合,图案名称之间用空格分隔。所有组合按字符串字典序从小到大排序后输出。
示例输入:
示例输出:
from itertools import combinations
n, k = map(int, input().split())
patterns = input().split()
# 生成所有k个元素的组合
combs = list(combinations(patterns, k))
# 转换为字符串
result = [" ".join(c) for c in combs]
# 按字典序排序
result.sort()
for r in result:
print(r)
题目描述:
藏族唐卡画师在创作时需要决定m种矿物颜料的着色顺序。不同的着色顺序会影响唐卡的最终效果。请编写程序,生成这m种颜料名称的所有排列(全排列),并将所有排列按字符串字典序排序后输出。
输入格式:
第一行输入一个整数m(2 ≤ m ≤ 6),表示颜料种类数量。
第二行输入m个字符串(均为不含空格的颜料名称),用空格分隔。
输出格式:
每行输出一种排列,颜料名称之间用空格分隔。输出行数等于m!(m的阶乘)。按整个排列字符串的字典序从小到大排序。
示例输入:
示例输出:
from itertools import permutations
m = int(input())
colors = input().split()
# 生成所有排列
perms = list(permutations(colors))
# 转换为字符串列表
result = [" ".join(p) for p in perms]
# 按字典序排序
result.sort()
for r in result:
print(r)
题目描述:
某民族文化研究中心建立了一个民族节日数据库,每个节日记录包含四个信息:所属民族、节日名称、举办月份(1-12)、持续天数。请编写程序完成以下四项多维度分析任务:
1. 统计每个民族各有多少个节日,按民族名称字典序升序输出;
2. 找出拥有节日数量最多的民族(可能有并列),输出其民族名称;
3. 统计1到12月每个月份各有多少个节日;
4. 将所有节日按持续天数从多到少排序后输出;若天数相同,按民族名称字典序升序排列。
输入格式:
第一行输入一个整数n(1 ≤ n ≤ 100),表示节日记录的数量。
接下来n行,每行输入四个数据,格式为"民族 节日名称 月份 天数",中间用空格分隔。月份为整数1-12,天数为正整数。
输出格式:
依次输出四个部分的结果:
第一行输出"一、各民族节日数量:"。
接下来每行输出一个民族及其节日数量,格式为"民族:数量个"(按民族名称字典序升序排列)。
空一行后,输出"二、节日最多的民族(X个):"(X为最大节日数量)。
接下来输出所有拥有最多节日的民族名称,多个民族之间用顿号(、)分隔,按字典序排列。
空一行后,输出"三、节日月份分布:"。
接下来每行输出格式为"X月:Y个"(X=1到12),共12行。
空一行后,输出"四、按持续天数排序(从多到少):"。
接下来每行输出一个节日,格式为"民族 节日名称 X月 Y天",按持续天数降序排列,天数相同按民族名称升序排列。
示例输入:
示例输出:
n = int(input())
records = []
for _ in range(n):
parts = input().split()
ethnicity = parts[0]
name = parts[1]
month = int(parts[2])
days = int(parts[3])
records.append((ethnicity, name, month, days))
# 1. 统计每个民族的节日数量
ethnicity_count = {}
for r in records:
eth = r[0]
ethnicity_count[eth] = ethnicity_count.get(eth, 0) + 1
print("一、各民族节日数量:")
for eth in sorted(ethnicity_count.keys()):
print(f"{eth}:{ethnicity_count[eth]}个")
# 2. 找出节日数量最多的民族
max_count = max(ethnicity_count.values())
most = [eth for eth, cnt in ethnicity_count.items() if cnt == max_count]
most.sort()
print(f"\n二、节日最多的民族({max_count}个):")
print("、".join(most))
# 3. 统计节日月份分布
month_count = {}
for r in records:
m = r[2]
month_count[m] = month_count.get(m, 0) + 1
print("\n三、节日月份分布:")
for m in range(1, 13):
cnt = month_count.get(m, 0)
print(f"{m}月:{cnt}个")
# 4. 按持续天数排序
records_sorted = sorted(records, key=lambda x: (-x[3], x[0], x[1]))
print("\n四、按持续天数排序(从多到少):")
for r in records_sorted:
print(f"{r[0]} {r[1]} {r[2]}月 {r[3]}天")