a271: 彩色萝卜
这篇教学会示范 ZeroJudge 基础题库“a271: 彩色萝卜”的解题过程。
题目需求
题目会先提供测试的数量,接着提供第二笔数据 x、y、z、w、n,、m 六个数字,六个数字分别代表“红萝卜吃了胖 xg,白萝卜吃了胖 yg,黄萝卜吃了瘦 zg,发霉的萝卜吃了瘦 wg ( 附加中毒 ),中毒会使兔子每天瘦 ng ( 中毒当天不算 ),中毒状态可累加,m 是兔子初始的体重 ( 早上先中毒,晚上才吃东西 )。
接着第三笔数据为一串每天吃什么的对照数字,1 代表红萝卜,2 代表白萝卜,3 代表黄萝卜,4 代表黑萝卜,0 代表没吃。如果体重有在任意时刻少于等于 0,输出:“bye~Rabbit”,不然就印出结束时的体重。
题目链接:a271: 彩色萝卜
解答
首先使用一个字典档 role,定义 key 为 0~4 时分别对应的数字,接着使用 for 循环依序取出每天的状态搭配字典档计算出体重。
而这题的关键在于“中毒会减少体重”,根据题目的提示“早上先中毒,晚上才吃东西”,每次循环开始时,必须要先将体重附加毒素 ( 减少 n ),所以在循环里会“判断两次体重”,一次是中毒之后的体重,一次是吃东西之后的体重,判断体重后就能顺利求出最后的结果。
num = int(input()) # 題目次數
for z in range(num): # 重複幾題
x,y,z,w,n,m = map(int, input().split()) # 取得 x、y、z、w、n,、m 的數字
role = {'0':0, '1':x, '2':y, '3':-z, '4':-w} # 定義吃蘿蔔對應的字典檔
try:
days = input().split() # 取得每天的狀態
gg = 0 # 中毒幾次
for i in days:
m = m - gg*n # 每天體重因為中毒變成多少
if m <= 0: break # 如果體重小於 0,跳出迴圈
if i == '4': gg = gg + 1 # 如果狀態為 4,中毒次數增加 1
m = m + role[i] # 體重因為狀態增加或減少
if m <= 0: break # 如果體重小於 0,跳出迴圈
if m <= 0:
print('bye~Rabbit') # 如果體重小於等於 0,印出 bye~Rabbit
else:
print(f'{m}g') # 如果體重大於 0,印出體重
except:
print(f'{m}g') # 如果程式中途結束,印出體重
微信扫码关注
抖音扫码关注