您的位置:首页 > 其它

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

2014-02-17 12:04 183 查看
题目描述:

在我国古代和近代,一直采用干支法纪年。它采用10天干和12地支配合,一个循环周期为60年。

10天干是:甲,乙,丙,丁,戊,己,庚,辛,壬,癸

12地支是:子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥

如果某年是甲子,下一年就是乙丑,再下是丙寅,......癸酉,甲戌,乙亥,丙子,....

总之天干、地址都是循环使用,两两配对。

今年(2012)是壬辰年,1911年辛亥革命

下面的代码根据公历年份输出相应的干支法纪年。已知最近的甲子年是1984年。

程序分析:

关键点是题目中的“循环使用,两两配对”这句话,循环使用就是除k取余

程序代码:

void f(int year)
{
char* x[] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
char* y[] = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};

int n = year - 1984;

while(n<0) n += 60;

printf("%s%s\n", x[n%10], y[n%12]);
}

int main(int argc, char* argv[])
{
f(1911);
f(1970);
f(2012);
return 0;
}


程序输出:

辛亥

庚戌

壬辰

我们还可以通过下面的程序,输出一个循环周期:

#include<iostream>
using namespace std;
int main()
{
char* x[] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
char* y[] = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
int n=0;
while(n+1<61)
{
cout<<n+1<<"	";
cout<<x[n%10]<<y[n%12]<<endl;
n++;
}
}


程序输出:

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 癸亥
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: