SGU - 115
Time Limit: 250MS | Memory Limit: 4096KB | 64bit IO Format: %I64d & %I64u |
Description
First year of new millenium is gone away. In commemoration of it write a program that finds the name of the day of the week for any date in 2001.
Input
Input is a line with two positive integer numbers N and M, where N is a day number in month M. N and M is not more than 100.
Output
Write current number of the day of the week for given date (Monday � number 1, � , Sunday � number 7) or phrase �Impossible� if such date does not exist.
Sample Input
21 10
Sample Output
7
Author | : Michael R. Mirzayanov |
Resource | : PhTL #1 Training Contests |
Date | : January 2002 |
Source
看起来挺简单的一个题。。
但是我WA了3次,,哭%>_<%啊
要判断日期是否合法,不合法则输出Impossible,合法则输出所对应的星期几,而2001年第一天就是星期一,模7即可。。
AC代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
using namespace std;
int a[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int judge(int n, int m) //判断日期是否合法
{
if(n==1 || n==3 || n==5 || n==7 || n==8 || n==10 || n==12)
{
if(m<=31)return 0;
}
else if(n==4 || n==6 || n==9 || n==11)
{
if(m<=30)return 0;
}
else if(n==2)
{
if(m<=28)return 0;
}
else return 1;
}
int main()
{
int n, m;
int flag = 0, ans = 0;
scanf("%d %d", &n, &m);
if(judge(m, n))flag = 1;
else
{
for(int i=1; i<m; i++)
{
ans += a[i];
}
ans += n;
}
if(flag)
{
printf("Impossible\n");
}
else
{
ans %= 7;
if(ans == 0) ans = 7;
printf("%d\n", ans);
}
return 0;
}