阿里校招暑假实习4.20笔试第一题:勇士打怪
程序员文章站
2024-03-19 22:53:04
...
题目:勇士打怪
假设勇士能力值为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))
上一篇: 数据增强之RandAugment
下一篇: 5-js-DOM-3-节点