zoj 3326 An Awful Problem

115 篇文章 0 订阅

zoj  3326  An Awful Problem                 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3751

模拟水

题目大意:Hiqivenfin母要在prime月prime日给他糖,给出起止日期,求得到糖数。

题目分析:模拟,耐心细心即可~

code:

#include<stdio.h>
int isPrime(int a)
{
    return a==2||a==3||a==5||a==7||a==11||a==13||a==17||a==19||a==23||a==29||a==31?1:0;
}
int nom(int y,int m)
{//number of month
    int n;
    switch(m)
    {
        case 2:n=(y%4==0&&y%100!=0||y%400==0)?10:9;break;
        case 3:
        case 5:
        case 7:n=11;break;
        case 11:n=10;break;
        default:n=0;
    }
    return n;
}
int dom(int y,int m)
{//day of month
    int n;
    switch(m)
    {
        case 2:n=(y%4==0&&y%100!=0||y%400==0)?29:28;break;
        case 3:
        case 5:
        case 7:n=31;break;
        case 11:n=30;break;
        default:n=0;
    }
    return n;
}
int main()
{
    int t,i,j,y1,y2,m1,m2,d1,d2,sum,temp;
    scanf("%d",&t);
    while(t--)
    {
        sum=0;
        scanf("%d%d%d%d%d%d",&y1,&m1,&d1,&y2,&m2,&d2);
        if(y1>=y2)//交换,似乎其实不用
        {
            if(y1>y2)temp=y1,y1=y2,y2=temp,temp=m1,m1=m2,m2=temp,temp=d1,d1=d2,d2=temp;
            else if(m1>=m2)
            {
                if(m1>m2)temp=m1,m1=m2,m2=temp,temp=d1,d1=d2,d2=temp;
                else if(d1>d2)temp=d1,d1=d2,d2=temp;
            }
        }
        if(y1==y2)//一样怎么办
        {
            if(m1==m2)
            {
                if(!isPrime(m1))
                {
                    printf("0\n");
                    continue;
                }
                for(i=d1;i<=d2;i++)
                    sum+=isPrime(i);
                printf("%d\n",sum);
                continue;
            }
            if(isPrime(m1))
                for(i=d1;i<=dom(y1,m1);i++)
                    sum+=isPrime(i);
            for(i=m1+1;i<m2;i++)
                sum+=nom(y1,i);
            if(isPrime(m2))
                for(i=1;i<=d2;i++)
                    sum+=isPrime(i);
            printf("%d\n",sum);
            continue;
        }
        if(isPrime(m1))//原来要精确到天啊,坑B!
            for(i=d1;i<=dom(y1,m1);i++)
                sum+=isPrime(i);//第一年
        for(i=m1+1;i<12;i++)
            sum+=nom(y1,i);
        for(i=y1+1;i<y2;i++)//中间的
            if(i%4==0&&i%100!=0||i%400==0)sum+=53;
            else sum+=52;
        for(i=2;i<m2;i++)
            sum+=nom(y2,i);
        if(isPrime(m2))
            for(i=2;i<=d2;i++)
                sum+=isPrime(i);//最后一年
        printf("%d\n",sum);
    }
    return 0;
}
PS:三wrong而过,悲从中来……




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值