算法设计与分析:田忌赛马
"""
问题描述:两千多年前的战国时期,齐威王与大将田忌赛马。双方约定约定每人各出300匹马,
并且在上、中、下3个等级中各选一匹进行比赛。由于齐威王每个等级的马都比田忌略强,
比赛的结果可想而知。现在双方各n匹马,依次派出一匹马进行比赛,每一轮获胜的一方将从输的一方得到200银币,
平局则不用出钱,田忌已知所有马的速度值并可以安排出场顺序,问他如何安排比赛获得的银币最多?
输入描述:输入包含多个测试用例,每个测试用例的第1行是正整数n(n<=1000),表示马的数量;后两行分别是n个整数,表示田忌和齐威王的马的速度值;输入n=0结束。
输出描述:每个测试用例输出一行,表示田忌获得的最多银币数。
问题表示:
n : 马的数量
a : 田忌的马
b :齐威王的马
"""
def solve():
ans = 0
while len(a):
if a[-1] > b[-1]: # 田忌最快的马比齐威王最快的马 快,两者比赛,田忌赢
ans += 200
del a[-1], b[-1]
elif a[-1] < b[-1]: # 田忌最快的马比齐威王最快的马 慢, 田忌输
ans -= 200
# 选择田忌最慢的马比齐威王最快的马比赛
del a[0], b[-1]
else: # 田忌最快的马和齐威王最快的马一样快时
if a[0] > b[0]: # 田忌最慢的马比齐威王最慢的马快,田忌赢
ans += 200
del a[0], b[0]
else:
if a[0] < b[-1]: # 田忌最慢的比齐王最快慢
ans -= 200
del a[0], b[-1] # 平局 pass
print("田忌获得的银币数为:", ans)
if __name__ == "__main__":
n = int(input("请输入n:"))
a = list(map(int, input("田忌马的速度 请输入一组整数用空格隔开:").split(" ")))
b = list(map(int, input("齐王马的速度 请输入一组整数用空格隔开:").split(" ")))
a.sort()
b.sort()
solve()
运行结果: