ZOJ 3594 Sexagenary Cycle

题意:天干地支。

        天干: 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()

{

    char str1[11][10]={"Jia","Yi","Bing","Ding","Wu","Ji","Geng","Xin","Ren","Gui"};

    char str2[13][10]={"zi","chou","yin","mao","chen","si","wu","wei","shen","you","xu","hai"};

    long n,t1,t2;

    scanf("%ld",&n);

    while(n--)

    {

        int x;

        scanf("%ld",&x);

        if(x==1) printf("Xinyou\n");

        else if(x==2) printf("Renxu\n");

        else if(x==3) printf("Guihai\n");

        else if(x>=4)

        {

            x-=3;

            x=x%60; 

            t1=x%10;

            t2=x%12;

            printf("%s%s\n",str1[(t1+9)%10],str2[(t2+11)%12]);

        }

        else

        {

            x*=-1;

            x+=2;

            x=60-x%60;

            t1=x%10;

            t2=x%12;

            printf("%s%s\n",str1[(t1+9)%10],str2[(t2+11)%12]);

        }

    }

    return 0;

}
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;

}

 

你可能感兴趣的:(ZOJ)