首页 > 其他分享 >【洛谷 P8738】[蓝桥杯 2020 国 C] 天干地支 题解(字符串+数学+模运算)

【洛谷 P8738】[蓝桥杯 2020 国 C] 天干地支 题解(字符串+数学+模运算)

时间:2024-03-29 11:33:30浏览次数:25  
标签:60 年份 题解 天干地支 蓝桥 索引 2020 1900

[蓝桥杯 2020 国 C] 天干地支

题目描述

古代中国使用天干地支来记录当前的年份。

天干一共有十个,分别为:甲(jiǎ)、乙(yǐ)、丙(bǐng)、丁(dīng)、戊
(wù)、己(jǐ)、庚(gēng)、辛(xīn)、壬(rén)、癸(guǐ)。

地支一共有十二个,分别为:子(zǐ)、丑(chǒu)、寅(yín)、卯(mǎo)、辰(chén)、巳(sì)、午(wǔ)、未(wèi)、申(shēn)、酉(yǒu)、戌(xū)、亥(hài)。

将天干和地支连起来,就组成了一个天干地支的年份,例如:甲子。2020 年是庚子年。

每过一年,天干和地支都会移动到下一个。例如 2021 年是辛丑年。

每过 60 年,天干会循环 6 轮,地支会循环 5 轮,所以天干地支纪年每 60年轮回一次。例如 1900 年,1960 年,2020 年都是庚子年。

给定一个公元纪年的年份,请输出这一年的天干地支年份。

输入格式

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

输出格式

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

样例 #1

样例输入 #1

2020

样例输出 #1

gengzi

提示

对于所有评测用例,输入的公元年份为不超过 9999 9999 9999 的正整数。

蓝桥杯 2020 年国赛 C 组 F 题。


思路

在天干地支系统中,每60年一个循环,也就是说天干地支的组合有60种可能。在这60种可能中,庚子(对应的天干地支索引为36)在公元1900年出现,且每60年出现一次。因此,可以将公元1900年看作是天干地支系统的一个起点。

因为要保证数组的索引从0开始,所以需要对年份进行一定的调整。将输入的年份与56相加,然后对60取余。如果将1900年作为起点(即索引0),那么2020年(又是一个庚子年)就是第120年,对应的索引应该是60。但在0开始的索引系统中,想要使2020年对应的索引为0,就需要对年份进行调整,使得1900年和2020年都能对应到索引0。通过分析,可以发现将年份加56可以达到这个效果。所以,(n + 56) % 60的结果就是给定公元年份对应的天干地支的索引。

首先,定义了两个字符串数组,分别表示天干和地支的拼音。然后,从输入中读取年份。通过 (n + 56) % 60 计算出天干地支的索引,这是因为1900年是庚子年,也就是第36个天干地支年,而2020年是庚子年,也就是第60个天干地支年,所以需要加56使得1900年对应到索引0。然后,使用模运算得到天干和地支的索引,输出对应的天干地支拼音。


AC代码

#include <algorithm>
#include <cmath>
#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;
using ll = long long;

const int N = 1e6 + 7;
const int INF = 0x3f3f3f3f;
const ll MOD = 1e9 + 7;

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

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	cin >> n;
	// (n + 36 - 1900 + 1920) % 60
	int t = (n + 56) % 60;
	// cout << (t % 10) << " " << (t % 12) << endl;
	cout << tiangan[t % 10] << dizhi[t % 12] << "\n";
	return 0;
}

标签:60,年份,题解,天干地支,蓝桥,索引,2020,1900
From: https://blog.csdn.net/qq_34988204/article/details/137118685

相关文章

  • 【洛谷 P8654】[蓝桥杯 2017 国 C] 合根植物 题解(并查集)
    [蓝桥杯2017国C]合根植物题目描述w星球的一个种植园,被分成m×nm\timesnm×n个小格子(东西方向......
  • 启动应用程序出现FirewallAPI.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个FirewallAPI.dll文件(挑选合适的版本文件)把......
  • 启动应用程序出现fthsvc.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个fthsvc.dll文件(挑选合适的版本文件)把它放......
  • 启动应用程序出现fontext.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个fontext.dll文件(挑选合适的版本文件)把它放......
  • Leetcode 第 126 场双周赛题解
    Leetcode第126场双周赛题解Leetcode第126场双周赛题解题目1:3079.求出加密整数的和思路代码复杂度分析题目2:3080.执行操作标记数组中的元素思路代码复杂度分析题目3:3081.替换字符串中的问号使分数最小思路代码复杂度分析题目4:3082.求出所有子序列的能量和思......
  • Leetcode 第 388 场周赛题解
    Leetcode第388场周赛题解Leetcode第388场周赛题解题目1:3074.重新分装苹果思路代码复杂度分析题目2:3075.幸福值最大化的选择方案思路代码复杂度分析题目3:3076.数组中的最短非公共子字符串思路代码复杂度分析题目4:3077.K个不相交子数组的最大能量值思路代码......
  • 蓝桥杯-百亿富翁
    题意:n个点,求出每个点的左边,右边,第一个比他高的点。思路:单调栈。voidsolve(){intn;cin>>n;vector<int>a(n);for(auto&x:a){cin>>x;}stack<int>stk;vector<pair<int,int>>ans(n,{-1,-1});......
  • lanqiao106. 正则问题 (第八届蓝桥杯C++A组)或者 acwing 1225. 正则问题
    问题:知识补充:1. 正则表达式的计算①括号代表优先计算,②或符号代表二选一。比如给的例子:((xx|xxx)x|(x|xx))xx 2. 字符串的语法问题:string是字符串的类型,使用的时候也使像字符一样使用,加入定义stringstr,那么使用的时候要写成str[]思考:妈呀一开始我不会算正则表达......
  • 大一下第四周ACM实验课题解
    7-1ACM宣传作者杜祥军单位青岛大学LB大神想组织集训队去学校各处宣传ACM,但是大神不想让队员们走太多路,因此想写代码计算一下,到各地宣传再回到博知401的最短路径总和是多少。已知:学校一共有n个宣传点,博知401是标号为1的点。剩下n-1个点每个点各派1位队员,询问每个队员到达宣......
  • 蓝桥杯 2022 省A 选数异或
    一种比较无脑暴力点的方法,时间复杂度是(n²+m)。(注意==的优先级比^高,记得加括号(a[i]^a[j])==x)#include<iostream>#include<vector>#include<bits/stdc++.h>//包含一些C++标准库中未包含的特定实现的函数的头文件usingnamespacestd;intmain(){intn,......