首页 > 试题广场 >

纪年

[编程题]纪年
Cwbc和XHRlyb在学习干支纪年法。
干支纪年法是中国历法上自古以来就一直使用的纪年方法。干支是天干和地支的总称。甲、乙、丙、丁、戊、己、庚、辛、壬、癸等十个符号叫天干;子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥等十二个符号叫地支。
为了方便程序的书写,我们不妨将天干记做1到10,地支记做1到12。
通过查阅日历,Cwbc知道农历2018年是戊戌年,XHRlyb想知道农历的n年是什么年。
0年指1年的前一年。
聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!

输入描述:
输入数据有多组数据,每行有一个整数,表示n。


输出描述:
输出数据应有多行,每行两个整数,分别表示天干和地支的编号。
示例1

输入

2018

输出

5 11
示例2

输入

2020

输出

7 1

备注:
n ∈ [0, 1018]。
1 ≤ T ≤ 1000。
头像 FoolBlade
发表于 2026-05-14 00:14:22
以求天干为例,假如当前日期和2018年的时间差为 d, 那么就相当于在2018年的天干的基础上移动d的距离,然后把最终移动的结果映射到1~10即可;对于映射 x 到1~10的求法就是(x-1)%10+1 可以想象将原数轴向左平移一格,变成求映射到(0,9),计算取余后的结果,再向右平移回去 #inc 展开全文
头像 AliLexiWalker
发表于 2026-05-14 00:52:27
以2018年对应天干5、地支11为基准,先算偏移量d=n-2018,再分别对10和12取模(负数补回)即可得到目标年的天干与地支编号。 void solve(){ ll n; while(cin>>n){ ll d=n-2018; ll a 展开全文
头像 Myaljk
发表于 2022-03-14 14:59:25
本题不需要考虑公元前的,我们只需要对应求公元后的方法即可。\\ 用年份除以十得到的余数再减三为天干的序数,用年份除以十二得到的余数再减三为地支序数,如1987年,得到的序数分别为4,4。所以该年为丁卯。只要知道这个公式这题就很简单了。 #pragma GCC optimize(2) #pragma 展开全文
头像 lotusor
发表于 2026-05-14 12:48:41
import sys input = lambda :sys.stdin.read().strip() check = list(map(int,input().split())) for n in check : l,r = 5,11 print(((n-2018+l)%10+9) 展开全文

问题信息

难度:
2条回答 78浏览

热门推荐

通过挑战的用户

查看代码
纪年