题目描述
古代中国使用天干地支来记录当前的年份。
天干一共有十个,分别为:甲(jiǎ)、乙(yǐ)、丙(bǐng)、丁(dīng)、戊(wù)、己(jǐ)、庚(gēng)、辛(xīn)、壬(rén)、癸(guǐ)。
地支一共有十二个,分别为:子(zǐ)、丑(chǒu)、寅(yín)、卯(mǎo)、辰(chén)、巳(sì)、午(wǔ)、未(wèi)、申(shēn)、酉(yǒu)、戌(xū)、 亥(hài)。
将天干和地支连起来,就组成了一个天干地支的年份,例如:甲子。
20202020 年是庚子年。
每过一年,天干和地支都会移动到下一个。例如 20212021 年是辛丑年。
每过 6060 年,天干会循环 66 轮,地支会循环 55 轮,所以天干地支纪年每 6060 年轮回一次。例如 19001900 年,19601960 年,20202020 年都是庚子年。
给定一个公元纪年的年份,请输出这一年的天干地支年份。
输入描述
输入一行包含一个正整数,表示公元年份。
其中有 ,输入的公元年份为不超过 99999999 的正整数。
输出描述
输入一行包含一个正整数,表示公元年份。
输入输出样例
示例
输入
2020
输出
gengzi
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
思路
首先毋庸置疑是需要求出 0000 年是什么年,由题意得 2020 年为庚子年,且 60 年为一个大循环,即 1960 和 2080 均为庚子年,同理可得 0040 年为庚子年(0040+60*33=2020) 根据 0040 年为庚子年我们可以得出:
- 天干每 10 年为一个循环,所以 0000 年为庚 x 年;
- 地支 12 年一个循环所以 0004 为 x 子年,0003 为 x 亥年,0002 为 x 戌年,0001 为 x 酉年,0000 年 x 申年。
综上所述,0000 年为庚申年,此时,我们打表可以按照天干庚为第一个,地支申为第一个,进行打表。另外这题打表不要敲错字符哦~
c代码:
#include<stdio.h>
int main(){
//推出0年是gengshen所以调整下面数组为0年年份开始排序
char *t[] = {"geng","xin","ren","gui","jia","yi","bing","ding","wu","ji"};
char *d[] = {"shen","you","xu","hai","zi","chou","yin","mao","chen","si","wu","wei"};
int n;
scanf("%d",&n);
printf("%s%s",t[n%10],d[n%12]);
return 0;
}
c++代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
string tiangan[] = {
"geng", "xin", "ren", "gui", "jia", "yi", "bing", "ding", "wu", "ji"
}, dizhi[] = {
"shen", "you", "xu", "hai", "zi", "chou", "yin", "mao", "chen", "si", "wu", "wei"
};
int main()
{
int n;
cin >> n;
cout << tiangan[n % 10] << dizhi[n % 12] << endl;
return 0;
}