洛谷 P8738:[蓝桥杯 2020 国 C] 天干地支 ← string

【题目来源】
https://www.luogu.com.cn/problem/P8738

【题目描述】
古代中国使用天干地支来记录当前的年份。
天干一共有十个,分别为:甲(jiǎ)、乙(yi))、丙(bing)、丁(ding)、戊(wù)、己(j))、庚(gēng)、辛(xin)、壬(rén)、癸(guì)。
地支一共有十二个,分别为:子(zi)、丑(chou)、寅(yin)、卯(măo)、辰(chén)、已(si)、午(wü)、未(wèi)、申(shen)、酉(you)、戌(xu)、亥(hài)。
将天干和地支连起来,就组成了一个天干地支的年份,例如:甲子。2020 年是庚子年。
每过一年,天干和地支都会移动到下一个。例如 2021 年是辛丑年。
每过 60 年,天干会循环6轮,地支会循环 5 轮,所以天干地支纪年每60年轮回一次。例如 1900 年,1960 年,2020 年都是庚子年。
给定一个公元纪年的年份,请输出这一年的天干地支年份。

【输入格式】
输入一行包含一个正整数,表示公元年份。

【输出格式】
输出一个拼音,表示天干地支的年份,天干和地支都用小写拼音表示(不表示声调),之间不要加入任何多余的字符。

【输入样例】
2020

【输出样例】
gengzi

【数据范围】
对于所有评测用例,输入的公元年份为不超过 9999 的正整数。
蓝桥杯 2020 年国赛 C 组 F 题。

【算法分析】
● 天干地支
天干:"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"
地支:"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"

● 通用计算公式(公元后通用)
在上文序号以 1 开始的天干地支前提下,给定任意公历年份 Y,天干序号 = (Y - 3) ÷ 10 的余数地支序号 = (Y - 3) ÷ 12 的余数
但考虑到 C++ 数组的下标从 0 开始,所以如上天干序号、地支序号的计算公式修正为:
(1)天干序号 = (Y - 4) ÷ 10 的余数
(2)地支序号 = (Y - 4) ÷ 12 的余数
但要注意,当 Y 取 1、2、3 时,Y - 4 为负数,故有了下文 getIndex 函数中 idx 是否小于 0 的判断。

【算法代码】

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

string t[]= {"jia","yi","bing","ding","wu","ji","geng","xin","ren","gui"};
string d[]= {"zi","chou","yin","mao","chen","si","wu","wei","shen","you","xu","hai"};

int getIndex(int x,int mod) {
    int idx=x%mod;
    return idx<0?idx+mod:idx;
}

int main() {
    int n;
    cin>>n;
    int tgIndex=getIndex(n-4,10);
    int dzIndex=getIndex(n-4,12);

    string tg=t[tgIndex];
    string dz=d[dzIndex];
    cout<<tg<<dz<<endl;

    return 0;
}

/*
in:2020
out:gengzi
*/

【参考文献】
https://mp.weixin.qq.com/s/8ZZiiHuEM6VmjvgHJzjaOA
https://www.luogu.com.cn/problem/solution/P8738

相关推荐
飞天狗1111 天前
2025第十六届蓝桥杯c/c++B组国赛题解
c语言·c++·算法·蓝桥杯
迈巴赫车主3 天前
蓝桥杯21247弹跳鞋java
java·开发语言·数据结构·算法·职场和发展·蓝桥杯
Trouvaille ~4 天前
【优选算法篇】深入浅出链表算法:交换、重排与合并的终极策略
c++·算法·链表·面试·蓝桥杯·笔试·后端开发
阿方.9185 天前
C++ string 超全精讲 | 从零使用、底层原理、手搓简易string、高频考点、易错点、面试手撕
开发语言·c++·字符串·string·知识分享
Gavin-Wang6 天前
swift 代码规范
蓝桥杯·swift·代码规范
210Brian7 天前
蓝桥杯单片机学习笔记(十四) V2026大模板源代码
单片机·学习·蓝桥杯
此生决int8 天前
算法从入门到精通——位运算
数据结构·c++·算法·蓝桥杯
210Brian9 天前
蓝桥杯单片机学习笔记(十三) V2026大模板构筑(下)
单片机·学习·蓝桥杯
罗湖老棍子11 天前
The xor-longest Path(信息学奥赛一本通- P1478)
算法·字符串·字典树··lca最近公共祖先
此生决int11 天前
算法从入门到精通——前缀和
c++·算法·蓝桥杯