阿里校招暑假实习4.20笔试第一题:勇士打怪

题目:勇士打怪

假设勇士能力值为a

每个怪兽也有能力b

如果勇士的能力值大于等于怪兽得能力值,则勇士可以消灭怪兽获得1金币

勇士随时可以花费1金币使自己的能力值提高1

输入如下:

a,n

A[i]

1 3

1 2 2

含义:勇士能力值a为1,有3个怪兽,每个怪兽的能力存在A[i]中,求勇士能获得的最大金币数,怪兽可以不打完。

我在CSDN里边浏览了一小会儿就看到了这个题目,以下是原文出处:https://blog.csdn.net/y125231776/article/details/105643381

看到这篇文章后我就自己来捣鼓捣鼓:

这是他的思路:

勇士当前能力值能获得的最大金钱

也就是找到勇士能获得的最大能力值

循环为能力值从初始值到最大能力值

找到每个能力值下能获得的最大金钱:

使用bisect包中的bisect_right(),对所有怪兽能力排序后

可直接获取该能力下能获得的最大金钱

再减去升到该能力值的花费即可

最终输出每个能力值下能获得的最大金钱的最大值

然后我的思路:

将怪物能力值进行排序,勇士永远只打最辣鸡的怪

创建一个元组warrior用来保存目前有的金钱及对应的能力值

每当勇士打完这个能力值所能打的怪后,比较目前金钱是否是历史最多,是的话就取代warrior,否就继续

若金钱不够升级来打下一级的怪物,或走完全程,则勇士回家领便当^_^

最终输出初始能力金钱、怪物的能力、金钱最多值和对应的能力值,以及最后拥有的金钱和对应的能力值

代码如下:

import random
monster=[]#怪物能力值
for i in range(40):
    monster.append(random.randint(1,100))
for i in range(30):
    monster.append(random.randint(1,75))
for i in range(20):
    monster.append(random.randint(1,50))
for i in range(10):
    monster.append(random.randint(1,25))
monster.sort()
#以上是我自己模拟的怪物能力值,这部分题目回给出,以下才是正题
if __name__ == "__main__":
    a=5#勇士能力值
    money=0#勇士的金币
    warrior=money,a
    print('勇士初始的金币和能力值:', warrior)
    for b in monster:
        if a>=b:
            money+=1
        else:
            if money>warrior[0]:
                warrior=money,a
            if a+money<b:
                break
            else:
                money-=b-a-1
                a=b
    print('怪物的能力值:',end='')
    for i in range(100):
        if i%25==0:
            print()
        print(monster[i],end='\t')
    print()
    print('最高金币时对应的能力值:',warrior)
    print('最终拥有的金币及能力值:',(money,a))

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值