# -*- coding: UTF-8 -*- #
'''
@filename: Horse_Racing.py
@author:JIN
@time:2022-11-11
background:问题描述:
二千多年前的战国时期,齐威王与大将田忌赛马。双方约定每人各出300匹马,
并且在上、中、下三个等级中各选一匹进行比赛,
由于齐威王每个等级的马都比田忌的马略强,比赛的结果可想而知。
现在双方各n匹马,依次派出一匹马进行比赛,
每一轮获胜的一方将从输的一方得到200银币,平局则不用出钱,
田忌已知所有马的速度值并可以安排出场顺序,问他如何安排比赛获得的银币最多?
输入描述:输入包含多个测试用例,
每个测试用例的第1行是正整数n(n<=1000),表示马的数量;
后两行分别是n个整数,表示田忌和齐威王的马的速度值;输入n=0结束。
输出描述:每个测试用例输出一行,表示田忌获得的最多银币数。
思想:#将齐王和田忌的马按照战斗力排序,然后按照排名一一对比。
# 如果田忌的马能赢,那就比赛,如果赢不了,那就换个垫底的来送人头,保存实力。
'''
#两个选手马匹数量相等
while(int(input("请输入马匹的数量"))!=0):
#选手一积分
ans=0
a = list(map(int,input("请输入选手1号的马匹的速度并且用空格间隔").split()))
n=int(len(a))
b = list(map(int, input("请输入选手2号的马匹的速度并且用空格间隔").split()))
#将选手1的马匹速度从快到慢排序
list.sort(a,reverse=True)
#将选手2的马匹速度从快到慢排序
list.sort(b,reverse=True)
print(a)
print(b)
#选手1最快的马匹大于选手2最快的马匹
i1=0
i2=-1
j1=0
j2=-1
for i in range(n):
# 选手一最快的打选手二最快的打的过
if(a[i1]>b[j1]):
ans+=200
print(f"第{i}次比赛:选手一马匹速度为【{a[i1]}】VS选手二马匹速度为【{b[j1]}】,积分为{ans}")
a.pop(i1)
b.pop(j1)
print(a)
print(b)
#选手一最弱的打选手二最弱的打的过
elif (a[i2]>b[j2]):
ans+=200
print(f"第{i}次比赛:选手一马匹速度为【{a[i2]}】VS选手二马匹速度为【{b[j2]}】,积分为{ans}")
a.pop(i2)
b.pop(j2)
print(a)
print(b)
#否则上面两种情况都不符合,就浪费选手一的最弱马和选手一的最强马跑
elif(a[i2]<b[j1]):
ans-=200
print(f"第{i}次比赛:选手一马匹速度为【{a[i2]}】VS选手二马匹速度【{b[j2]}】,积分为{ans}")
a.pop(i2)
b.pop(j1)
print(a)
print(b)
else:
print(f'第{i}次比赛平局:选手一马匹速度为【{a[i2]}】VS选手二马匹速度【{b[j2]}】,积分为{ans}')
print("选手一获得的最多银币数为",ans)
贪心算法之田忌赛马
最新推荐文章于 2024-02-08 13:44:39 发布