题目如下:
题目的意思应该是,每个精灵只能出战一次,不能你体力是多少,只有你出战了,体力就相当于用完了
n, m = list(map(int, input('输入天虫和精灵数量,以一个空格分割').split(" ")))
while True:
n_f = list(map(int, input('输入每个天虫防御力,以一个空格分割').split(" ")))
if len(n_f) == n:
break
print('请输入{}只天虫的防御力'.format(n))
while True:
m_t = list(map(int, input('输入每个精灵体力,以一个空格分割').split(" ")))
if len(m_t) == m:
break
print('请输入{}只精灵的体力'.format(m))
#复制
n_f2 = n_f.copy()
m_t2 = m_t.copy()
#排序
n_f2.sort(reverse = True) #降序
m_t2.sort()#默认升序
ti = 0
#精灵按天虫防御力从大到小依次找自己能杀死的
for i in range(len(m_t2)):
s = None
for j in range(len(n_f2)):
if m_t2[i] >= n_f2[j]:
ti += m_t2[i]
s = n_f2[j]
break
if s != None:
n_f2.remove(s)
if len(n_f2) == 0:
print(ti)
else:
print("null")
精灵只能杀死防御力等于小于自己攻击力的天虫,而且每个精灵和天虫只能各自出战一次,
首先精灵伤害值和天虫防御力从小到大排序
循环遍历每只天虫, 找到最小的伤害值 >= 当前天虫防御力的精灵, 把精灵伤害值加到体力总和,移除出战过的精灵
你题目的解答代码如下:
n,m = map(int,input().split())
sli = list(map(int,input().split()))
jli = list(map(int,input().split()))
def pf():
# 精灵伤害值和天虫防御力从小到大排序
sli.sort()
jli.sort()
sp_sum = 0 #体力总和
for s in sli: #遍历每只天虫
for i,v in enumerate(jli):#遍历每只精灵
if v>=s: #找到最小的伤害值 >= 当前天虫防御力的精灵
sp_sum += v #精灵伤害值加到体力总和
jli.pop(i) #移除出战过的精灵
break
else:
return 'null' #如果没有精灵能杀死当前天虫,返回null
return sp_sum
print(pf())
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
精灵只能杀死等于小于自己攻击力的天虫,而且精灵和天虫都只能各自出战一次,那么先比较双方最大值,若天虫最大防御力 > 精力最大攻击力那么精灵不久杀不死天虫吗(毕竟没说又血条)在者,若天虫最大防御力 <= 精力最大攻击力那再接着判断双发第二大攻击力和防御力。只有对应的精灵的攻击力大于昆虫的防御力精灵才可以获胜,这是剩余的体力就等于精灵攻击力的总和 - 天虫的防御力