题目:
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:day、month 和 year,分别表示日、月、年。
您返回的结果必须是这几个值中的一个 {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。
算法:
方法一:模拟
知识点:
- 闰年的判断方法,四年一闰,百年不闰,四百年又闰.
- 闰年二月多一天
- 1971/1/1是星期五这件事要查询。
有些要用到的信息需要通过搜索引擎查到,题目中信息没给全。面试中可以问面试官。
func dayOfTheWeek(day int, month int, year int) string {
result := []string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
monthDay := []int{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
// 1971年1月1日星期五,保证days + day = 5,初始化days = 4
days := 4
// 处理年份
for i := 1971; i < year; i ++ {
if (i % 4 == 0 && i % 100 != 0) || i % 400 == 0 {
days = days + 366
} else {
days = days + 365
}
}
// 处理月份
for i := 1; i < month; i ++ {
days = days + monthDay[i - 1]
// 闰二月多一天
if i == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ) {
days = days + 1
}
}
// 处理天
days = days + day
return result[days % 7]
}