zcmu 1199

版权声明:个人做题总结专用~ https://blog.csdn.net/tb_youth/article/details/84453005

1199: 英雄无敌3(2)
Time Limit: 1 Sec Memory Limit: 128 MB
[Submit][Status][Web Board]
Description

英雄无敌3中的兽人觉得人类的星期制度很好,要模仿这个制度,但他们大多都很愚蠢,他们搞不明白人类的星期制度。虽然他们出了很多题目(给出日期,输出星期几),但不知道答案,作为兽人的人类朋友,你可以帮助他们吗?(为了表示方便,0代表星期天,1代表星期一,2代表星期二,3代表星期三,4代表星期四,5代表星期五,6代表星期六)

Input

第一行输入一个数t,代表题目数。

每个题目有3个正整数分别为y(0<y<=2013), m(0=<m<=20), d(0<=d<=40)分别代表年,月,日。

Output

对于每组案例,输出一个整数,代表星期几(当然由于兽人很愚蠢,他们给出的日期有可能是不存在的,对于这种情况,请输出-1)

Sample Input

1
2013 4 25

Sample Output

4

HINT

Source

AC代码~:

#include <stdio.h>
long long a[2015]= {0};
int b[13]= {0,31,0,31,30,31,30,31,31,30,31,30,31};//月份天数,2月暂时初始为0
//判断是否为闰年
bool leapyear(int y)
{
    if((y%4==0&&y%100!=0)||y%400==0)
        return true;
    return false;
}
int main()
{
    a[2] =365;
    for(int i = 3; i <= 2013; i++)//前啊a[i]存前i年前(不包括i)有多少天
    {
        if(leapyear(i-1))
            a[i] += a[i-1]+366;
        else
            a[i] += a[i-1]+365;
    }
    int y,m,d,t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d",&y,&m,&d);
        if(leapyear(y))
            b[2] = 29;
        else
            b[2] = 28;
        if(d > b[m]||m==0||d==0||m>12)//这里要想全面
            printf("-1\n");
        else
        {
            long long sum = a[y];
            for(int i = 1; i < m; i++)
                sum += b[i];
            sum += d;
            printf("%d\n",sum%7);
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/tb_youth/article/details/84453005