# c636 - 十二生肖 ### 題目連結: [c636](https://zerojudge.tw/ShowProblem?problemid=c636) ### 題目解析 * 給定民國的年份,請問對應的生肖為何 * 此題在考的是串列索引值的存取使用與循環關係 ### 題目類型 數學/串列 ### 範例測資解讀 * 輸入 * 輸入為一個民國年份,範圍從 -100 ~ 107 * 輸出 * 為一個中文字 (十二生肖) ### 其他注意事項 * 民國元年是鼠年,這句話很重要 * 你認為民國元年是 1 年還是 0 年呢? ### 程式解析 十二生肖代表有 12 個中文字,需要創造一個串列用來儲存 ``` python animal = ["鼠", "牛", "虎", "兔", "龍", "蛇", "馬", "羊", "猴", "雞", "狗", "豬"] ``` 若民國元年為鼠年,則代表循環順序的基準點,因為每12年為一個循環 * 民國元年為鼠年 * 民國 13 年為鼠年 * 民國 26 年為鼠年 * ... 將輸入變數設計為 animal 串列的索引值,經過計算後以取得不同年份的對應生肖 ``` python animal = ["鼠", "牛", "虎", "兔", "龍", "蛇", "馬", "羊", "猴", "雞", "狗", "豬"] year = input() #year-1 代表第0個元素, 當民國元年 => animal[0] print( animal[(year-1)%12] ) ``` 但是題目有說明也需要尋找民國前年份的對應生肖,因為負數的索引值位置與民國後的順序不同,因此不能直接帶入索引值 另外一個很重要的觀念是,民國元年是民國 1 年,民國前一年不是民國 0 年,是民國 -1 年 若要求民國前年份的對應生肖有兩種寫法 1. 利用==絕對值==的概念,取絕對值後再將索引值倒過來計算 ``` python year = input() abs_year = abs(year) print(animal[12-abs_year%12]) ``` 2. 反轉 animal 串列,以此方式就不需要改變索引值的計算方式 ``` python re_animal = ["豬", "狗", "雞", "猴", "羊", "馬", "蛇", "龍", "兔", "虎", "牛", "鼠"] year = input() print(re_animal[abs(year)]) ``` ### 完整程式碼 (非精簡寫法,僅提供參考) ``` python=01 import sys animal = ["鼠", "牛", "虎", "兔", "龍", "蛇", "馬", "羊", "猴", "雞", "狗", "豬"] #start for s in sys.stdin: year = int(s) if year>0: if year%12==0: print(animal[11]) else: index = year%12-1 print(animal[index]) elif year<0: abs_year = abs(year) if abs_year%12==0: print(animal[0]) else: index = 12-abs_year%12 print(animal[index]) ``` ###### tags: `基礎15題解` `APCS` `ZeroJudge`