版权声明:个人做题总结专用~ 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;
}