您的位置:首页 > 其它

ZOJ 3594 Sexagenary Cycle

2012-04-18 10:15 288 查看
题意:天干地支。

天干: Jia, Yi, Bing, Ding, Wu, Ji, Geng, Xin, Ren and Gui

地支: Zi, Chou, Yin, Mao, Chen, Si, Wu, Wei, Shen, You, Xu and Hai

每一轮是60次,不要误认为120次。。。(常识),这道题是经典的水题,很水但是还是被坑了很久大概一下午加一晚上。。。。。搞不懂自己什么水平

说下这道题目的坑把,首先是输出地支的时候是小写。。。其次还有AD和BC之分刚开始没有看见要求BC,最后是定义数组后当取余为0时候应该换到最后一个所以str[(t+9)%12]刚开始的时候把天干也当成12个了 害我找了很久

思路:刚开始看了维基百科里的解法,这也是第一次看英文会的解法,求AD,若n>=4则,n=(n-3)%60,若n=1-3,则代表58th,59th,60th。求BC,n=60-(n+2)%60.

第二种方法简单,根据1911推导下就ok了,至于BC就是倒着来,和AD刚好相反

View Code

#include <stdio.h>
int main(int argc, char *argv[])
{
int T,n;
int t1,t2;
char str1[15][10]={"Xin","Ren","Gui","Jia","Yi","Bing","Ding","Wu","Ji","Geng"};
char str2[15][10]={"you","xu","hai","zi","chou","yin","mao","chen","si","wu","wei","shen"};
char str3[11][10]={"Geng","Ji","Wu","Ding","Bing","Yi","Jia","Gui","Ren","Xin"};
char str4[15][10]={"shen","wei","wu","si","chen","mao","yin","chou","zi","hai","xu","you"};
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
if(n>0)
{
n%=60;
t1=n%10;
t2=n%12;
printf("%s%s\n",str1[(t1+9)%10],str2[(t2+11)%12]);
}
else
{
n*=-1;
n%60;
t1=n%10;
t2=n%12;
printf("%s%s\n",str3[(t1+9)%10],str4[(t2+11)%12]);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: