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') # 如果程式中途結束,印出體重
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~