Regionals 2016 :: Asia

来源:互联网 发布:draw9patch mac 编辑:程序博客网 时间:2024/06/02 05:30


题意:给出形如XX-XX-XX格式的字符串,问正确的日期个数最多有多少,并规定若输入是04-05-01,输出为1.

题解:将每个XX部分首先当作年,然后将其他两个XX部分分别当作日和月,总共模拟六次,当任意两个XX相同并符合条件时,答案除以2,模拟时直接考虑符合的条件,比如月大于12的,日大于31或30或29或28的情况直接不管,代码看起来长,其实都是直接复制的。

特例:39-03-03  后面两部分既可以当月也可以当日,计算时重复计算了一次,最后输出时直接除以2。


#include<stdio.h>char s[10];int a[3];int main(){    int T,ans,k,p,i;    scanf("%d",&T);    int l=T;    while(T--)    {        scanf("%s",s);        ans=0;        a[0] = (s[0]-'0')*10 + (s[1]-'0');        a[1] = (s[3]-'0')*10 + (s[4]-'0');        a[2] = (s[6]-'0')*10 + (s[7]-'0');        if(a[0]==4 && a[1]==5 && a[2]==1)            printf("Case #%d: 1\n",l-T);        else if(a[0]==a[1] && a[0]==a[2] && a[0]<=12 && a[0]>0)//若每个部分都一样且都小于12,则输出1            printf("Case #%d: 1\n",l-T);        else        {            for(i=0; i<3; i++)            {                int y = 1900 +a[i];                if(i==0)                    k = i+1,p=i+2;                else if(i==1)                    k=i-1,p=i+1;                else if(i==2)                    k=i-2,p=i-1;                if(a[k]<=12)                {                    if(a[k]==2)                    {                        if(y%4==0&&y%100!=0||y%400==0)//判断闰年                        {                            if(a[p]<=29 &&a[p]>0)                                ans++;                        }                        else                        {                            if(a[p]<=28&&a[p]>0)                                ans++;                        }                    }                    else if(a[k]==1||a[k]==3||a[k]==5||a[k]==7||a[k]==8||a[k]==10||a[k]==12)                    {                        if(a[p]<=31&&a[p]>0)                            ans++;                    }                    else if(a[k]==4||a[k]==6||a[k]==9||a[k]==11)                    {                        if(a[p]<=30&&a[p]>0)                            ans++;                    }                }                if(a[p]<=12)                {                    if(a[p]==2)                    {                        if(y%4==0&&y%100!=0||y%400==0)                        {                            if(a[k]<=29&&a[k]>0)                                ans++;                        }                        else                        {                            if(a[k]<=28&&a[k]>0)                                ans++;                        }                    }                    else if(a[p]==1||a[p]==3||a[p]==5||a[p]==7||a[p]==8||a[p]==10||a[p]==12)                    {                        if(a[k]<=31&&a[k]>0)                            ans++;                    }                    else if(a[p]==4||a[p]==6||a[p]==9||a[p]==11)                    {                        if(a[k]<=30&&a[k]>0)                            ans++;                    }                }            }            if(a[0]==a[1]||a[1]==a[2]||a[0]==a[2])//特例                printf("Case #%d: %d\n",l-T,ans/2);            else                printf("Case #%d: %d\n",l-T,ans);        }    }    return 0;}



原创粉丝点击