SoulisProgrammer 2023-11-13 22:07 采纳率: 54.5%
浏览 24
已结题

PTA | 7-31上将邢道荣

导入

img

1.长枪兵
2.弓弩兵
3.刀盾兵
4.铁骑兵

img

由于未知原因,双方都只选择了一个兵种参与作战。
邢道荣实乃大才,他自觉”战无不胜“的秘诀就是“自己开战前战斗力是对方的两倍及以上”,否则就撤退!

(ZZF无论如何绝对不撤退!)

输入格式:

第一行给出五个正整数分别为: N1 N2 K P L
N1 :邢道荣的兵种 ,[1,4]
N2 :ZZF的兵种 ,[1,4]
K :ZZF的总兵力 ,[10^3,10^5]
P :ZZF的统帅值 ,[40,100]
L :ZZF的武力值 ,[40,100]

输出格式:

第一行输出对战双方的战斗力 (结果保留两位小数)
如果交战了输出交战开始时的双方军队战斗力,否则输出交战前的战斗力

第二行输出邢道容军队最后的战况 (保证不会平手)
如果邢道荣赢了输出: win
如果邢道荣战败输出: fail
如果邢道荣逃跑:running

邢道荣军队的战斗力 ZZF军队的战斗力
邢道荣军队战况

输入样例1:

1 1 15001 66 77

输出样例1:

60000.00 30002.00
running

输入样例2:

1 2 15000 60 60

输出样例2:

52800.00 72000.00
fail

输入样例3:

1 3 10000 100 100

输出样例3:

60000.00 28000.00
win

我的实现代码

python3

N1, N2, K, P, L = list(map(int, input().split(' ')))
index = {
    2: [0.88, 3],
    4: [1.75, 0.95],
    6: [0.66, 2.5],
    8: [1.28, 6.48],
    12: [0.77, 3.24]
}
# hit_xdr = 30000 * ((66 + 60) * 0.01 + (77 - 40) * 0.02)
hit_xdr = 60000.00
hit_ZZF = K * ((P + 60) * 0.01 + (L - 40) * 0.02)
if hit_xdr >= hit_ZZF * 2:
    if N1 != N2 and N1 * N2 in index.keys():
        hit_xdr *= index[N1 * N2][0]
        hit_ZZF *= index[N1 * N2][1]
    print(f'{hit_xdr:.2f} {hit_ZZF:.2f}')
    if hit_xdr > hit_ZZF:
        print('win', end='')
    else:
        print('fail', end='')
else:
    print(f'{hit_xdr:.2f} {hit_ZZF:.2f}')
    print('running', end='')

问题

img


会有两个测试点过不去,想知道哪里出问题了

  • 写回答

3条回答 默认 最新

  • 梦幻精灵_cq 2023-11-14 08:56
    关注
    • 我认为,您的代码有两个地方,可能有些问题。

      1、这个if语句块应该后退一个缩进的吧?

      img



      2、计算双方战前总兵力,需要用兵力相克比率来的。

      python字典是可以用元组作键的。

    • 我认为,只要对战,就要用兵种相克比率来计算双方总兵力,然后根据战前兵力“产生”战况,输出相应战况。

      img


      img


      img

    python代码

    
    sword = lambda x: x[0] * (0.01*(x[1]+60) + 0.02*(x[2]-40)) # 计算总兵力单行匿名函数。
    restrain = {(1, 2): (88, 300),
                (1, 4): (175, 95),
                (2, 3): (66, 250),
                (2, 4): (128, 648),
                (3, 4): (77, 324)} # 兵种相克比率字典。
    inData = list(map(float, input('\n输入:\n').strip().split()))
    N1, N2 = inData[:2]
    rates = restrain[(N1, N2)] if (N1, N2) in restrain else (100, 100) # 兵种相克比率。
    rates = restrain.get((N1, N2), (100, 100)) # 兵种相克比率:如果相克,启用相克比率;否则比率仍为1:1。
    XDR = sword((30000, 66, 77)) * rates[0] / 100 # 邢道荣兵力计算。
    ZZF = sword(inData[2:]) * rates[-1] / 100 # ZZF兵力计算。
    
    progress = 'Win' if XDR >= ZZF*2 else 'Runing' if XDR > ZZF else 'Fail'
    print(f"\n输出:\n{XDR:.2f} {ZZF:.2f}\n{progress}")
    
    

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月1日
  • 已采纳回答 5月24日
  • 创建了问题 11月13日

悬赏问题

  • ¥50 使用MS Log Parser查询使用Bitvise SSH Server登录的IP
  • ¥20 校园二手交易小程序搭建
  • ¥15 请问在ubuntu用conda创建环境报错怎么能解决
  • ¥15 STM32CubeMX/proteus按键控制指示灯颜色切换
  • ¥20 python,计算区位熵和扩张指数
  • ¥15 Python环境配置
  • ¥15 大四学生的困惑,有偿提问!
  • ¥15 解决页面无法编入索引:被“noindex”标签排除的问题?
  • ¥15 arduino测量电阻
  • ¥15 快手uid转快手号谁能解决 需要开发