Test Message

c638: 天干地支

內容

天干,是中國古代的一種文字計序符號,共 10 個字: 甲、乙、丙、丁、戊、己、庚、辛、壬、癸,循環使用。( wiki )
地支是指木星軌道被分成的十二個部分,記為子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。木星的公轉週期大約為十二年,所以中國古代用木星來紀年,故而稱為「歲星」。後來又將這十二個部分命名,這就是「地支」。( wiki )
.....
西元 1906 年(丙午年) 於德國柏林召開的國際無線電通信大會中,決定以「SOS」為國際求救信號(1908 年 7 月 1 日起正式使用)( wiki )
.....
給您若干個西元年,請算出其天干地支。 1800 <= y <= 2018


輸入

1906
1895

輸出

丙午
乙未


解題思路

先找到小於 1800 年的最後一個甲子年: 1744 年

我們知道一甲子為 60 年,所以將 n 設為 (輸入值 - 1744) % 60,
然後我們又知道天干 10 年一輪、地支 12 年一輪,將 n 分別 %10、%12 即是該年的天干地支。


完整程式碼

AC (2ms, 104KB)
#include <stdio.h>

char sky[][4] = { "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" };
char grd[][4] = { "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" };

int main()
{
int n;
while (scanf(" %d", &n) == 1)
{
n = (n - 1744) % 60;
printf("%s%s\n", sky[n % 10], grd[n % 12]);
}
return 0;
}