题目描述:
在我国古代和近代,一直采用干支法纪年。它采用10天干和12地支配合,一个循环周期为60年。
10天干是:甲,乙,丙,丁,戊,己,庚,辛,壬,癸
12地支是:子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥
如果某年是甲子,下一年就是乙丑,再下是丙寅,......癸酉,甲戌,乙亥,丙子,....
总之天干、地址都是循环使用,两两配对。
今年(2012)是壬辰年,1911年辛亥革命
下面的代码根据公历年份输出相应的干支法纪年。已知最近的甲子年是1984年。
思路:已知干支法纪年第一个是”甲子“年,那么只要再看见一次”甲子“,就说明已经循环一个轮回了,
所以,我先输出一个轮回所有干支法纪年的名称。
操作代码
#include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int flag=1,x=0,i=0,j=0,k=1; char a[10][3]={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"}; char b[12][3]={"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"}; while(flag) { printf("Case %d:",k++); if(i==10) i=0; printf("%s",a[i++]); if(j==12) j=0; printf("%s\n",b[j++]); if(i-1==0&&j-1==0) x++; if(x==2) flag=0; } system("pause"); return 0; }
Case 1:甲子
Case 2:乙丑
Case 3:丙寅
Case 4:丁卯
Case 5:戊辰
Case 6:己巳
Case 7:庚午
Case 8:辛未
Case 9:壬申
Case 10:癸酉
Case 11:甲戌
Case 12:乙亥
Case 13:丙子
Case 14:丁丑
Case 15:戊寅
Case 16:己卯
Case 17:庚辰
Case 18:辛巳
Case 19:壬午
Case 20:癸未
Case 21:甲申
Case 22:乙酉
Case 23:丙戌
Case 24:丁亥
Case 25:戊子
Case 26:己丑
Case 27:庚寅
Case 28:辛卯
Case 29:壬辰
Case 30:癸巳
Case 31:甲午
Case 32:乙未
Case 33:丙申
Case 34:丁酉
Case 35:戊戌
Case 36:己亥
Case 37:庚子
Case 38:辛丑
Case 39:壬寅
Case 40:癸卯
Case 41:甲辰
Case 42:乙巳
Case 43:丙午
Case 44:丁未
Case 45:戊申
Case 46:己酉
Case 47:庚戌
Case 48:辛亥
Case 49:壬子
Case 50:癸丑
Case 51:甲寅
Case 52:乙卯
Case 53:丙辰
Case 54:丁巳
Case 55:戊午
Case 56:己未
Case 57:庚申
Case 58:辛酉
Case 59:壬戌
Case 60:癸亥
Case 61:甲子(进入第二次轮回)
原来干支纪年是60年一个轮回啊,又学到知识了
这样,每60年更新一次轮回,那么,以题目中”最近的甲子年是1984年“来看,应该这样写:
AC代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int flag=1,x=0,i=0,j=0,k=0,n; char a[10][3]={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"}; char b[12][3]={"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"}; printf("请输入年份:"); scanf("%d",&x); n=x-1984; while(n<0) n+=60; while(flag) { k++; if(i==10) i=0; i++; if(j==12) j=0; j++; if(k-1==n) flag=0; } printf("%d年是%s%s年\n",x,a[i-1],b[j-1]); system("pause"); return 0; }
请输入年份:1911
1911年是辛亥年
请按任意键继续. . .
请输入年份:1984
1984年是甲子年
请按任意键继续. . .
请输入年份:2012
2012年是壬辰年
请按任意键继续. . .