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

相关推荐
List<String> error_P1 天前
Python蓝桥杯常考知识点-模拟
开发语言·python·蓝桥杯
闻缺陷则喜何志丹1 天前
【分组背包】P12316 [蓝桥杯 2024 国 C] 循环位运算|普及+
c++·算法·蓝桥杯·洛谷·分组背包
_OP_CHEN1 天前
【算法提高篇】(三)线段树之维护更多的信息:从基础到进阶的灵活运用
算法·蓝桥杯·线段树·c/c++·区间查询·acm/icpc·信息维护
闻缺陷则喜何志丹2 天前
【拆位法】P8743 [蓝桥杯 2021 省 A] 异或数列|普及+
c++·蓝桥杯·位运算·拆位法
闻缺陷则喜何志丹2 天前
【C++DFS 马拉车】3327. 判断 DFS 字符串是否是回文串|2454
c++·算法·深度优先·字符串·力扣·回文·马拉车
Tisfy2 天前
LeetCode 3714.最长的平衡子串 II:前缀和(一二三分类)
算法·leetcode·前缀和·字符串·题解
仰泳的熊猫2 天前
题目1474:蓝桥杯基础练习VIP-阶乘计算
数据结构·c++·算法·蓝桥杯
闻缺陷则喜何志丹2 天前
【状态压缩动态规划】P8733 [蓝桥杯 2020 国 C] 状态压缩动态规划|普及+
c++·算法·蓝桥杯·动态规划·洛谷
_OP_CHEN2 天前
【算法提高篇】(二)线段树之区间修改:懒标记的核心奥义与实战实现
算法·蓝桥杯·线段树·c/c++·区间查询·acm/icpc·懒标记