洛谷 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

相关推荐
Chester_19992 天前
CSP202104C.DHCP服务器
开发语言·程序人生·蓝桥杯
_Narcissus_5 天前
二分算法笔记及例题
数据结构·c++·笔记·算法·蓝桥杯·查找·二分算法
aqiu1111118 天前
【算法刷题】蓝桥杯/AtCoder:删除元素后的中位数问题(Symmetry / Median)
算法·蓝桥杯·排序·中位数
Tisfy12 天前
LeetCode 3090.每个字符最多出现两次的最长子字符串:二重循环 / 滑动窗口
算法·leetcode·字符串·题解·模拟·双指针·滑动窗口
wabs66612 天前
关于字符串【力扣541.反转字符串II的思考】
数据结构·算法·leetcode·字符串
恣逍信点12 天前
《凌微经》价值论:变化即本体,价值即涌现
人工智能·科技·程序人生·蓝桥杯·业界资讯·交友·哲学
小龙报16 天前
【优选算法】1.搜索插入位置 2.x的平方根
java·c语言·数据结构·c++·python·算法·蓝桥杯
依然鸣20 天前
PTA团体程序设计天梯赛L2真题讲解L2-037-040
c++·经验分享·学习·算法·蓝桥杯·深度优先·pat考试
YuforiaCode20 天前
第十六届蓝桥杯 2025 C/C++组 数列差分
c语言·c++·蓝桥杯
QAQo7T20 天前
Python组蓝桥杯备赛超详细知识点总结笔记_排序算法篇
笔记·python·算法·蓝桥杯·排序算法