古代中国使用天干地支来记录当前的年份。
天干一共有十个,分别为:甲(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)。
将天干和地支连起来,就组成了一个天干地支的年份,例如:甲子。
2020 年是庚子年。
每过一年,天干和地支都会移动到下一个。例如 2021 年是辛丑年。
每过 60 年,天干会循环 6 轮,地支会循环 5 轮,所以天干地支纪年每
60 年轮回一次。例如 1900 年,1960 年,2020 年都是庚子年。
给定一个公元纪年的年份,请输出这一年的天干地支年份。
输入一行包含一个正整数,表示公元年份。
其中有 ,输入的公元年份为不超过 9999 的正整数。
输入一行包含一个正整数,表示公元年份。
2020
gengzi
#include
int main()
{
char tiangan[10][10]={"jia","yi","bing","ding","wu","ji","geng","xin","ren","gui"};
// 0 1 2 3 4 5 6
char dizhi[12][10]={"zi","chou","yin","mao","chen","si","wu","wei","shen","you","xu","hai"};
// 0
int year=2020;
int i=6;
int j=0;
int n=0;
scanf("%d",&n);
if(n>2020)
{
for(int l=2020;l<n;l++)
{
i++;j++;
if(i==10) i=0;
if(j==12) j=0;
}
}
else if(n<2020)
{
for(int l=2020;l>n;l--)
{
i--;j--;
if(i==-1) i=9;
if(j==-1) j=11;
}
}
printf("%s%s",tiangan[i],dizhi[j]);
return 0;
}
解题思路:以零年为基准
#include
using namespace std;
#include
int main()
{
string tiangan[]={"geng","xin","ren","gui","jia","yi","bing","ding","wu","ji"};
string dizhi[]={"shen","you","xu","hai","zi","chou","yin","mao","chen","si","wu","wei"};
int n;
//以0年为基准判断
//2020为庚子年
//2020%10=0说明0年和2020年一样为庚年;
//2020%12=4(还差4年满一轮到子年)因为余4在子年往前推四年为申年,所以0年为申年;
cin>>n;
cout<<tiangan[n%10]<<dizhi[n%12]<<endl;
return 0;
}