??前面的話??
大家好!本篇文章將介紹力扣[1185. 一周中的第幾天]題解,展示代碼語言暫時為:C語言,(后續會更新Java與C++代碼)
📒博客主頁:未見花聞的博客主頁
🎉歡迎關注🔎點贊👍收藏??留言📝
📌本文由未見花聞原創,CSDN首發!
📆首發時間:🌴2021年10月27日🌴
??堅持和努力一定能換來詩與遠方!
💭刷題推薦書籍:📚《劍指offer第1版》,📚《劍指offer第2版》
💬參考在線編程網站:🌐牛客網🌐力扣
🙏作者水平很有限,如果發現錯誤,一定要及時告知作者哦!感謝感謝!
博主的碼云gitee,平常博主寫的程式代碼都在里面,
📌導航小助手📌
- ??1185. 一周中的第幾天??
- 🔐題目詳情
- 💡解題思路
- 🔑源代碼
- 🌱總結

??1185. 一周中的第幾天??
🔐題目詳情
給你一個日期,請你設計一個演算法來判斷它是對應一周中的哪一天, 輸入為三個整數:
day、month 和 year,分別表示日、月、年,
您回傳的結果必須是這幾個值中的一個{"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"},
示例:
輸入:day = 31, month = 8, year = 2019
輸出:"Saturday"
輸入:day = 18, month = 7, year = 1999
輸出:"Sunday"
輸入:day = 15, month = 8, year = 1993
輸出:"Sunday"
提示:
給出的日期一定是在1971 到 2100年之間的有效日期,
| 來源:力扣(LeetCode)鏈接:https://leetcode-cn.com/problems/day-of-the-week |
|---|
💡解題思路
解法1:因為給出的日期一定是在1971 到 2100年之間的有效日期,所以以1971-01-01為參照,求距離該日總天數,取模7,輸出對應星期,
參考【LeetCode系列】1360. 日期之間隔幾天,求距離某天總天數思路,這里不再使用代碼展示,
解法2:套用公式,蔡勒公式或基姆拉爾森計算公式,
(1)蔡勒公式,
W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1(或者是:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1)
若要計算的日期是在1582年10月4榷訓之前,公式則為:w=y+[y/4]+[c/4]-2c+[13(m+1)/5]+d+2,
w:星期,w再對7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
c:世紀減1(年份前兩位數)
y:年(后兩位數)
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月來計算,比如2003年1月1日要看作2002年的13月1日來計算)
d:日
[ ]代表取整,即只要整數部分,
(2)基姆拉爾森計算公式,
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7
W:星期數
d:天數
m:月份
y:年份
公元0年1月1日星期日,公元1年1月1日星期一,
注意:在公式中有個與其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,(也就是說假想一年是3-14月,首年首日為3月1日)
因為能夠避免閏年對第二月天數的判斷,
例:如果是2004-1-10則換算成2003-13-10來代入公式計算,
推導程序參考鏈接:https://www.cnblogs.com/SeekHit/p/7498408.html
其實蔡勒公式與基姆拉爾森計算公式是一個公式,只是有很多版本,很明顯后者那個公式要比前者公式簡單得多,
🔑源代碼
char * dayOfTheWeek(int day, int month, int year){
//基姆拉爾森計算公式,1,2月算上一年13,14月
if (month <= 2)
{
month += 12;
year--;
}
char* week[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
int h = (day +2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400 + 1 ) % 7;
return week[h];
}
🌱總結
利用基姆拉爾森計算公式,需要注意1,2月算上一年13,14月,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/339059.html
標籤:其他
上一篇:開發到底要不要轉行軟體測驗?
下一篇:二叉樹的中序遍歷
