题目描述:

    在我国古代和近代,一直采用干支法纪年。它采用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年一个轮回啊,又学到知识了

最近的甲子年是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年是壬辰年
请按任意键继续. . .