贪心算法之田忌赛马

 
# -*- 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值