您的位置:首页 > 编程语言 > C语言/C++

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

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

    在我国古代和近代,一直采用干支法纪年。它采用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      癸亥
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 蓝桥杯