在AI刷题中,我发现有很多关于游戏英雄升级之类的题目,这里向给大家做一个整合和总结。
- “游戏英雄升级潜力评估”:小U在一款挂机游戏中拥有n个英雄。游戏中有一种历练升级机制,每天可以选择两个英雄进行历练,如果两位英雄的等级相同,则他们的等级都不会改变。如果英雄等级不同,那么等级较高的英雄会增加1级,而等级较低的英雄则保持不变。小U希望至少有一个英雄能够达到2000000000000000级,他想知道有多少英雄有潜力通过历练达到这个等级。这题看似复杂,但我们结合测试样例来看,实则很简单,比如样例1,输入n=5,u=[1,2,3,1,2],输出为3。样例2:输入n=4,u=[100000,100000,100000,100000],输出为0,仔细一看,我们只需找到给定的数组中大于最小元素的个数就能实现,例如下面的代码:
# 将怪物的血量和攻击力组合成一个列表,并按照综合指标排序
monsters = sorted(zip(h, a), key=lambda x: x[0] * x[1], reverse=True)
# 初始化小E的血量和攻击力
current_H = H
current_A = A
# 初始化击败的怪物数量
defeated_count = 0
# 遍历排序后的怪物列表
for monster_h, monster_a in monsters:
# 检查小E是否能击败当前怪物
if current_H > monster_h and current_A > monster_a:
# 如果能击败,更新小E的血量和攻击力
current_H = monster_h
current_A = monster_a
# 增加击败的怪物数量
defeated_count += 1
# 返回最终击败的怪物数量
return defeated_count
值得一提的是,样例中有几个的输出是错的,所以提交不能通过,但代码是正确的,我们主要还是能学会如何把问题能转化成用代码可以实现并且是简便。如果我有什么纰漏,还请大家留言指正。
- “小E的怪物挑战”:小E在一个游戏中遇到了n个按顺序出现的怪物,每个怪物都有其特定的血量hi和攻击力ai。小E的初始血量为H,攻击力为A。 游戏规则如下:
- 小E可以击败一个血量和攻击力都小于她当前属性的怪物。
- 对于第一个击败的怪物,需要满足其血量小于 HH 且攻击力小于 AA。
- 击败怪物后,小E会获得该怪物的属性值。
- 为了保持战斗节奏,要求击败的怪物序列中,后一个怪物的血量和攻击力都必须严格大于前一个怪物。
小E想知道,她最多能击败多少怪物。 审题之后不难发现,只要我们按怪物的强弱依次选择击败,就能保证打败最大数量的怪物,那么关键在于我们如何定义怪物的强大?其实小E能否击败怪物要看小E的血量和攻击是否分别大于怪物的,那我们可以把怪物的血量h和攻击a的乘积h*a作为一个综合指标来给怪物进行排序,让小E依次比较、替换,最后统计击败的个数,问题就迎刃而解了,参考代码如下:
potential=0 #有潜力达到目标的英雄个数
min_level=min(u) #最低等级的英雄
max_level=max(u) #最高等级的英雄
if min_level!=max_level: #统计数组中大于最低等级的个数
for i in range(len(u)):
if u[i]>min(u):
potential+=1
else:
return 0
这题的难度标定是困难,但实际来看,甚至比简单的题目还要容易,所以在练题的过程中,千万不要被它困难的标签吓住。