【数组】1185. 一周中的第几天(简单)

it2025-04-26  12

【题目】 给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。输入为三个整数:day、month 和 year,分别表示日、月、年。您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}。 【示例 1】 输入:day = 31, month = 8, year = 2019 输出:“Saturday” 【示例 2】 输入:day = 18, month = 7, year = 1999 输出:“Sunday” 【示例 3】 输入:day = 15, month = 8, year = 1993 输出:“Sunday” 【提示】 给出的日期一定是在 1971 到 2100 年之间的有效日期。 【代码】

class Solution { public: int d[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} }; int y[2]={365,366}; int isLeapYear(int year){ if((year%4==0&&year%100!=0)||year%400==0) return 1; return 0; } string dayOfTheWeek(int day, int month, int year) { string week[9]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; int sumday=4,flag; for(int i=1971;i<year;i++) sumday+=y[isLeapYear(i)]; flag=isLeapYear(year); for(int j=1;j<month;j++) sumday+=d[flag][j]; sumday+=day; return week[sumday%7]; } };

【基姆拉尔森计算公式】

class Solution { public: string dayOfTheWeek(int day, int month, int year) { if(month==1||month==2) month+=12,year--; int iWeek = (day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7; //基姆拉尔森计算公式 string result[]= { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday","Sunday"}; return result[iWeek]; } };
最新回复(0)