标签:
HDU 2007-11 Programming Contest_WarmUp
题目大意:给你一个日期,先判断日期是否合法,不合法输出"illegal",继续下组数据输入。合
法的话,计算出该日期是周几,然后输出相应星期的英文单词。参考日期是2007年11月17日是
星期六。
思路:按2007年11月17日来算太过繁琐,因为公元0001年1月1日是星期一,这样递推算到要计
算的日期就变简单了不少。统计从1年1月1日到给出日期的总天数是多少,因为只需要计算星期,
所以只要对7取余的值即可。用了数组来保存每月天数和星期的单词,简洁了不少。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int a[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
int b[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
char s[8][10] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
bool IsRunNian(int year)
{
if((year%4==0 && year%100!=0) || year%400==0)
return true;
return false;
}
int main()
{
int year,month,day;
while(cin >> year >> month >> day)
{
if(IsRunNian(year))
{
if(day > a[month] || month == 0 || day == 0)
{
cout << "illegal" << endl;
continue;
}
}
else
{
if(day > b[month] || month == 0 || day == 0)
{
cout << "illegal" << endl;
continue;
}
}
int sum = 0;
for(int i = 1; i < year; ++i)
{
if(IsRunNian(i))
sum += 366;
else
sum += 365;
sum %= 7;
}
for(int i = 0; i < month; ++i)
{
if(IsRunNian(year))
sum += a[i];
else
sum += b[i];
sum %= 7;
}
sum += day;
sum %= 7;
cout << s[sum] << endl;
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/lianai911/article/details/43266321