Python解题-循环

题目如下:

img


输入格式为:

img


类似:

img


怀疑样例是错的
求解法,使用Python,不能引入其他库

题目的意思应该是,每个精灵只能出战一次,不能你体力是多少,只有你出战了,体力就相当于用完了


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")

精灵只能杀死防御力等于小于自己攻击力的天虫,而且每个精灵和天虫只能各自出战一次,
首先精灵伤害值和天虫防御力从小到大排序
循环遍历每只天虫, 找到最小的伤害值 >= 当前天虫防御力的精灵, 把精灵伤害值加到体力总和,移除出战过的精灵

你题目的解答代码如下:

img

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())

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

精灵只能杀死等于小于自己攻击力的天虫,而且精灵和天虫都只能各自出战一次,那么先比较双方最大值,若天虫最大防御力 > 精力最大攻击力那么精灵不久杀不死天虫吗(毕竟没说又血条)在者,若天虫最大防御力 <= 精力最大攻击力那再接着判断双发第二大攻击力和防御力。只有对应的精灵的攻击力大于昆虫的防御力精灵才可以获胜,这是剩余的体力就等于精灵攻击力的总和 - 天虫的防御力