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

相关推荐
hansang_IR2 天前
【题解】LC:Z 算法(Z Algorithm)
c++·算法·字符串
卡兹墨5 天前
iOS从打包到上架详细流程
ios·职场和发展·蓝桥杯
Tisfy5 天前
LeetCode 3014.输入单词需要的最少按键次数 I:遍历 / if-else计算(比纯数学公式写起来麻烦但好想)
数学·算法·leetcode·字符串·题解·贪心
不正经学生6 天前
二叉树递归遍历:先根与后根,递归思维的最佳试炼场
c语言·开发语言·数据结构·算法·蓝桥杯
Tisfy7 天前
LeetCode 3517.最小回文排列 I:排序(Python两行版) / 计数(O(n)时间+O(C)空间+字符串原地修改)
c语言·python·leetcode·字符串·排序·计数排序·回文
布朗克16821 天前
Go 入门到精通-16-字符串深入
开发语言·后端·golang·字符串
鱼子星_21 天前
【C++】string(上):string的基本使用
c++·笔记·字符串
Ivanqhz23 天前
NFM(神经因子分解机)
开发语言·javascript·人工智能·算法·蓝桥杯
变量未定义~1 个月前
单调栈、单调队列(模板)、子矩阵(模板)
数据结构·算法·蓝桥杯
智者知已应修善业1 个月前
【P12159蓝桥杯数组翻转】2025-4-24
c语言·c++·经验分享·笔记·算法·蓝桥杯