# 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`