题目:
天干地支
题目描述
古代中国使用天干地支来记录当前的年份。
天干一共有十个,分别为:甲(jiǎ)、乙(yi)、丙 (bing)、丁 (ding)、戊 (wù)、己 (i)、庚(geng)、辛 (xin)、王(rén)癸(gui)。
地支一共有十二个,分别为:子(2)、丑(chǒu)、寅(yin)、卯(mǎo)、辰(chén)、曰(s)、午(wǔ)、未 (wèi)、申(shēn)、西(yǒu)、成(x)、亥(hài)。
将天干和地支连起来,就组成了一个天干地支的年份,例如:甲子。
2020 年是庚子年。
每过一年,天干和地支都会移动到下一个。例如 2021 年是辛丑年。
每过 60 年,天千会循环 6轮,地支会循环5 轮,所以天干地支纪年每 60 年轮回一次。例如 1900年,1960年,2020 年都是庚子年。
给定一个公元纪年的年份,请输出这一年的天干地支年份。
输入描述
输入一行包含一个正整数,表示公元年份。
其中有 ,输入的公元年份为不超过 9999 的正整数。
输出描述
输入一行包含一个正整数,表示公元年份。
输入输出样例
示例:
输入
2020
输出
gengzi
题解
-
算法分析和描述
算法描述:
- 输入:从标准输入读取一个正整数 num,表示公元年份。
- 初始化:
定义两个数组 tian 和 di 分别存储天干和地支的名称。
Tian 包含了天干的名称,共有10个元素。
di 包含了地支的名称,共有12个元素。
3.计算天干和地支:
使用取余运算符计算 i = num % 10,得到天干的索引。
使用取余运算符计算 j = num % 12,得到地支的索引。
4.输出:将 tian[i] 和 di[j] 连接起来输出,即输出对应的天干和地支的名称。
算法分析:
1.时间复杂度:该算法的时间复杂度主要由取余运算决定,为常数时间复杂度 O(1),因为无论输入的年份是多少,取余操作的时间复杂度都是 O(1)。
2.空间复杂度:空间复杂度取决于数组 tian 和 di 的空间,它们分别包含10个和12个字符串元素,因此空间复杂度为 O(1),即常数空间复杂度。
-
实现代码
-
#include <iostream> #include <string> using namespace std; int main() { string tian[10]={"geng","xin","ren","gui","jia","yi","bing","ding","wu","ji"}; string di[12]={"shen","you","xu","hai","zi","chou","yin","mao","chen","si","wu","wei"}; int i,j,num; cin>>num; i=num%10; j=num%12; cout<<tian[i]<<di[j]; return 0; }
总结分析
-
该算法实现了根据公元年份计算其对应的天干地支,并输出结果。它使用简单的取余运算来确定年份在天干和地支循环中的位置,从而快速确定对应的名称。主要问题在于输入的处理,算法假定输入为正整数,未对负数或其他非法输入进行处理。解决这些问题可以通过添加输入验证和异常处理机制来增强算法的健壮性。总体来说,该算法适用于日常需求中的天干地支查询,具有简单、高效的特点,但在更广泛的应用中需要考虑扩展性和输入的边界情况处理。