中国农历采取天干地支作为计算年,月,日,时的方法,就是把每一个天干和地支按照一定的顺序而不重复地搭配起来,用来作为纪年,纪月,纪日,纪时的代号。把“天干”中的一个字摆在前面,后面配上“地支”中的一个字,这样就构成一对干支。如果“天干”以“甲”字开始,“地支”以“子”字开始顺序组合,就可以得到:
1.甲子 2.乙丑 3.丙寅 4.丁卯 5. 戊辰 6.已巳 7.庚午 8.辛未 9.壬申 10.癸酉11. 甲戌 12.乙亥 13.丙子 14.丁丑 15.戊寅 16.已卯 17.庚辰 18.辛巳 19.壬午 20.癸未21.甲申 22.乙酉 23.丙戌 24.丁亥 25.戊子 26.已丑 27.庚寅 28.辛卯 29.壬辰 30.癸巳31.甲午 32.乙未 33.丙申 34.丁酉 35.戊戌 36.已亥 37.庚子 38.辛丑 39.壬寅 40.癸卯41.甲辰 42.乙巳 43.丙午 44.丁未 45.戊申 46.已酉 47.庚戌 48.辛亥 49.壬子 50.癸丑51.甲寅 52.乙卯 53.丙辰 54.丁巳 55.戊午 56.已未 57.庚申 58.辛酉 59.壬戌 60.癸亥
这六十对干支,天干经六个循环,地支经五个循环正好是六十,就叫做“六十干支”。按照这样的顺序每年用一对干支表示,六十年一循环,叫做“六十花甲子”。如2013年是癸巳年,1990是庚午年;从1984年的甲子年,到2044年又是甲子年。这种纪年方法就叫做“干支纪年法”,一直沿用到今天。历史上的辛亥革命、戊戌变法等说法均源于此。
假设我们用0-9依次代替10个天干,A-L依次代替12个地支,现在请你写一段程序,根据给定的年份算出其干支纪年法所对应的年份。
输入格式:
第1 行是测试数据的组数T(0<T<100)。后面跟着T 行测试用例,每行一个正整数n(1000<n<3000),代表公元纪年法的年份。
输出格式:
T行,每行对应一个测试用例,为该年份所对应的干支纪年法的年份(相应的字符表示)。
输入样例:
3
1984
1990
2044
输出样例:
0A
6G
0A
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int i;
int y[n];
for(i=0;i<n;i++)
{
scanf("%d",&y[i]);
}
for(i=0;i<n;i++)
{
int m;
m=y[i]%60;
if(m<3)
m=m-3+60;
else
m-=3;
int p,q;
p=m%10;
if(p==0)
p=9;
else
p-=1;
q=m%12;
if(q==0)
q=11;
else
q-=1;
switch(p)
{
case 0:printf("0");break;
case 1:printf("1");break;
case 2:printf("2");break;
case 3:printf("3");break;
case 4:printf("4");break;
case 5:printf("5");break;
case 6:printf("6");break;
case 7:printf("7");break;
case 8:printf("8");break;
case 9:printf("9");break;
};
switch(q)
{
case 0:printf("A\n");break;
case 1:printf("B\n");break;
case 2:printf("C\n");break;
case 3:printf("D\n");break;
case 4:printf("E\n");break;
case 5:printf("F\n");break;
case 6:printf("G\n");break;
case 7:printf("H\n");break;
case 8:printf("I\n");break;
case 9:printf("J\n");break;
case 10:printf("K\n");break;
case 11:printf("L\n");break;
}
}
return 0;
}