You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:调试Survive the Attack(7 kyu)数组比较算法代码

算法题调试求助

给定两个数组,数组元素代表士兵战力,判断防守方是否存活(返回True),否则返回False。规则如下:

  • 双方同索引士兵互相攻击,战力高的存活;
  • 战力相等时双方士兵都阵亡;
  • 数组长度不同时,超出部分的士兵直接存活;
  • 防守方存活条件:存活人数多于进攻方;
  • 若双方存活人数相同,初始总战力高的一方获胜;总战力相同则返回True(防守方存活);
    初始总战力为数组所有元素之和。

我写了下面的代码,但只通过了约半数测试用例,找不到错误原因:

def is_defended(attackers, defenders):
    survivors_a = 0
    survivors_b = 0
    
    if attackers < defenders:
        survivors_b+=1
        
    if attackers > defenders:
        survivors_a+=1
    
    if attackers == defenders:
        survivors_a+=0
        survivors_b+=0

    if survivors_a == survivors_b and sum(attackers) > sum(defenders):
        return False
    
    if survivors_a == survivors_b and sum(attackers) < sum(defenders):
        return True
    
    if survivors_a == survivors_b and sum(attackers) == sum(defenders):
        return True
        
    elif survivors_a > survivors_b:
        return False
    
    elif survivors_a < survivors_b:
        return True

代码错误分析

  • 未遍历处理同索引对战:你直接拿整个数组做比较,数组间的比较是按元素逐个对比至第一个不同项,完全不符合题目中每个同索引士兵单独对战的规则,这是核心错误。
  • 忽略数组长度差异的处理:题目要求超出长度的士兵直接存活,但代码完全没计算这部分的存活人数。
  • 条件分支逻辑混乱:多个if和elif的组合存在冗余,且当存活人数不等时的判断逻辑容易触发异常分支。

修正后的代码

def is_defended(attackers, defenders):
    survivors_a = 0
    survivors_b = 0
    min_length = min(len(attackers), len(defenders))
    
    # 处理同索引士兵对战
    for a_power, d_power in zip(attackers, defenders):
        if a_power > d_power:
            survivors_a += 1
        elif d_power > a_power:
            survivors_b += 1
        # 战力相等时双方都阵亡,无需处理
    
    # 计算超出长度的存活士兵
    survivors_a += len(attackers) - min_length
    survivors_b += len(defenders) - min_length
    
    # 判断最终结果
    if survivors_b > survivors_a:
        return True
    elif survivors_b < survivors_a:
        return False
    else:
        # 存活人数相同,比较初始总战力
        total_attack = sum(attackers)
        total_defend = sum(defenders)
        if total_defend > total_attack:
            return True
        elif total_defend < total_attack:
            return False
        else:
            # 总战力相同,防守方存活
            return True

内容的提问来源于stack exchange,提问作者salmon_fish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:30:58