2012蓝桥杯【初赛试题】干支纪年

题目描述:

在我国古代和近代,一直采用干支法纪年。它采用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;}测试:

请输入年份:19111911年是辛亥年请按任意键继续. . .

请输入年份:19841984年是甲子年请按任意键继续. . .

请输入年份:20122012年是壬辰年请按任意键继续. . .

艰苦能磨练人的意志。

2012蓝桥杯【初赛试题】干支纪年

相关文章:

    你感兴趣的文章:

    标签云: