每日一题——1185. 一周中的第几天

1185. 一周中的第几天

给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。

输入为三个整数:day、month 和 year,分别表示日、月、年。

您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}。

提示:

  • 给出的日期一定是在 1971 到 2100 年之间的有效日期。

先去看看1970年12月31日是星期几

然后拆成三部分计算

目标日期前的所有年份的天数

目标日期当月之前的天数

目标日期当月当日的天数

要记得考虑闰年的影响

public class Solution {
    public string DayOfTheWeek(int day, int month, int year) {
        string[] week = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
        int[] monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
        //输入年份之前的年份的天数贡献
        int days = 365 * (year - 1971) + (year - 1969) / 4;
        //输入年份中,输入月份之前的月份的天数贡献
        for (int i = 0; i < month - 1; ++i) {
            days += monthDays[i];
        }
        if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month >= 3) {
            days++;
        }
        //输入月份中的天数贡献
        days += day;
        return week[(days + 3) % 7];
    }
}

当然做法不止一种

有更为直接的公式可以用 ——蔡勒公式

蔡勒公式_百度百科 (baidu.com)

甚至C#还给你内置了函数

public class Solution {
    public string DayOfTheWeek(int day, int month, int year) {
        return new DateTime(year, month, day).DayOfWeek.ToString();
    }
}

 

发表评论

您的电子邮箱地址不会被公开。