Python-贪心算法 田忌赛马

算法设计与分析:田忌赛马 


"""
问题描述:两千多年前的战国时期,齐威王与大将田忌赛马。双方约定约定每人各出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()

运行结果:

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gouzy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值