题解 | #Day of Week#

Day of Week

http://www.nowcoder.com/practice/a3417270d1c0421587a60b93cdacbca0

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int DayTab[2][13] = {
	{0,31,28,31,30,31,30,31,31,30,31,30,31},
	{0,31,29,31,30,31,30,31,31,30,31,30,31},
};
bool IsLeapYear(int year) {
	return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
string WeekDay[7] = { "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday" };
string MonthDay[13]={" ","January","February","March","April","May","June","July","August","September",
"October","November","December"
};
int Month(string str) {
	int Month = 0;
	while (MonthDay[Month] != str) {
		++Month;
	}
	return Month;
}
int YearTab[2] = { 365,366 };
int main() {
	int day, year, number, temp_year, day_num, month_num;
	string month, week_day;
	while (cin>>day>>month>>year) {
		month_num = Month(month);
		number = 0;
		temp_year = year;
		while (temp_year < 2001) {
			number += YearTab[IsLeapYear(temp_year)];
			++temp_year;
		}
		while (temp_year > 2001) {
			--temp_year;
			number += YearTab[IsLeapYear(temp_year)];
		}
		day_num = 0;
		for (int i = 0; i < month_num; ++i) {
			day_num += DayTab[IsLeapYear(year)][i];
		}
		day_num += day;
		number += (year < 2001) ? (282 - day_num) : (day_num - 282);   //以示例日期为基准,2001 11 9为2001年第282天,为tuesday
		if (year == 2001) {
			week_day = (day_num<282)? WeekDay[(1 - number) % 7] : WeekDay[(1+number) % 7];
		}
		else {
			week_day = (year < 2001) ? WeekDay[(1 - number) % 7] : WeekDay[(1+number) % 7];
		}
		cout << week_day << endl;
	}
	return 0;
}

全部评论

相关推荐

我的offer呢😡:这不才9月吗,26到明年毕业前能一直找啊,能拿下提前批,转正的,offer打牌的都是有两把刷子的,为什么非要跟他们比。如果别人是9本硕+金牌+好几段大厂实习呢?如果别人是双非通天代呢?如果别人是速通哥呢?,做好自己就行了,我们做不到他们一样提前杀死比赛,但晚点到终点也没啥关系吧
双非应该如何逆袭?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务