坂本智彥的演算法-尋找星期幾
在本文中,我們將討論什麼是 Tomohiko Sakamoto 演算法以及如何使用該演算法來識別給定日期是一周中的哪一天。有多種演算法可以知道星期幾,但這種演算法是最強大的一種。該演算法以盡可能最小的時間和最小的空間複雜度找到該日期出現的月份中的哪一天。
問題陳述 - 我們根據格魯吉亞曆法給出一個日期,我們的任務是使用 Tomohiko Sakamoto 的演算法找出給定日期是一周中的哪一天。
範例
輸入 - 日期 = 30,月份 = 04,年份 = 2020
輸出 - 給定日期是星期一
輸入 - 日期 = 15,月份 = 03,年份 = 2012
輸出 - 給定日期是星期四
輸入 - 日期 = 24,月份 = 12,年份 = 2456
輸出 - 給定日期是星期日
坂本智彥演算法
現在讓我們來討論坂本智彥演算法背後的直覺。
眾所周知,根據格魯吉亞曆,公元 1 月 1 日是星期一。
案例1忽略閏年
我們首先討論忽略所有閏年的情況,即一年共有 365 天。
由於一月有 31 天,一周有 7 天,所以我們可以說一月有 7*4 3 天,這意味著二月的第一天總是在一月的第一天之後 3 天。 p>
由於二月有28 天(閏年除外),它本身是7 的倍數,我們可以說3 月1 日將與2 月1 日在同一天,這意味著3 月1 日也將是3 1月1 日之後的幾天。
現在,對於 4 月,3 月有 31 天,即 7*4 3,這意味著它將發生在 3 月 1 日的 3 天之後。因此,我們可以說 4 月 1 日將發生在 1 月 1 日 1 日後 6 天。
我們現在將建立一個數組,其中 arr[i] 表示相對於 1 月 1 日這一天,第 i 個月發生後的額外天數。
我們有 arr[] = { 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 }。
案例 2 閏年
現在讓我們來討論閏年的情況。
每四年,我們的計算中就會增加一天,但每百年則不增加一天。我們必須考慮到這些額外的日子。為此,我們將使用公式 -
年/ 4(每 4 年)
– 年 / 100(對於每 100 年,即 4 的倍數但仍然不是閏年,我們會將其從閏年中刪除)
年/ 400(每第 400 年,它是 100 的倍數,但仍然是循環年)
這個公式將為我們提供準確的閏年數。不過,有一個例外。
現在,我們知道 2 月 29 日被視為閏日,而不是 1 月 0 日。
這意味著我們不需要將一年中的前兩個月納入計算中,因為閏日對其沒有影響。因此,如果是一月或二月,我們將從年份中減去 1 個進行補償。因此,在這些月份中,year/4 的值應該是基於上一年而不是當前年份。
為了解決閏年問題,我們可以將 2 月之後每個月的 arr[] 值減去 1,以填補空白。這樣就解決了閏年的問題。我們需要對演算法進行以下更改,以使其在閏年和平年都能發揮作用。
arr[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }
如果當月是一月或二月,我們需要將年份減 1。
我們需要將模數內的年增量修改為year year/4 –year/100 year/400而不是year。此更改是必要的,以考慮閏年中的額外一天並相應地調整計算。
範例
此方法的程式碼是:
#include <bits/stdc++.h> using namespace std; // code to find out the day number of the given date int Weekday(int year, int month, int day) { int arr[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }; if ( month < 3 ) year -= 1; return ( ( year + year / 4 - year / 100 + year / 400 + arr[month - 1] + day) % 7 ); } int main(void) { int day = 9, month = 9, year = 2020; int d = Weekday(year, month, day); string days[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; cout<< " The given date is on "; cout << days[d]; return 0; }
輸出
The given date is on Wednesday
複雜性
時間複雜度 - 此方法的時間複雜度為 O(1)
空間複雜度- 這種方法的空間複雜度是 O(1),因為我們沒有使用任何額外的空間。
結論 - 在本文中,我們討論了 Tomohiko Sakamoto 的演算法以及該演算法背後的直覺
以上是坂本智彥的演算法-尋找星期幾的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

寫在前面&筆者的個人理解目前,在整個自動駕駛系統當中,感知模組扮演了其中至關重要的角色,行駛在道路上的自動駕駛車輛只有通過感知模組獲得到準確的感知結果後,才能讓自動駕駛系統中的下游規控模組做出及時、正確的判斷和行為決策。目前,具備自動駕駛功能的汽車中通常會配備包括環視相機感測器、光達感測器以及毫米波雷達感測器在內的多種數據資訊感測器來收集不同模態的信息,用於實現準確的感知任務。基於純視覺的BEV感知演算法因其較低的硬體成本和易於部署的特點,以及其輸出結果能便捷地應用於各種下游任務,因此受到工業

C++中機器學習演算法面臨的常見挑戰包括記憶體管理、多執行緒、效能最佳化和可維護性。解決方案包括使用智慧指標、現代線程庫、SIMD指令和第三方庫,並遵循程式碼風格指南和使用自動化工具。實作案例展示如何利用Eigen函式庫實現線性迴歸演算法,有效地管理記憶體和使用高效能矩陣操作。

C++sort函數底層採用歸併排序,其複雜度為O(nlogn),並提供不同的排序演算法選擇,包括快速排序、堆排序和穩定排序。

人工智慧(AI)與執法領域的融合為犯罪預防和偵查開啟了新的可能性。人工智慧的預測能力被廣泛應用於CrimeGPT(犯罪預測技術)等系統,用於預測犯罪活動。本文探討了人工智慧在犯罪預測領域的潛力、目前的應用情況、所面臨的挑戰以及相關技術可能帶來的道德影響。人工智慧和犯罪預測:基礎知識CrimeGPT利用機器學習演算法來分析大量資料集,識別可以預測犯罪可能發生的地點和時間的模式。這些資料集包括歷史犯罪統計資料、人口統計資料、經濟指標、天氣模式等。透過識別人類分析師可能忽視的趨勢,人工智慧可以為執法機構

01前景概要目前,難以在檢測效率和檢測結果之間取得適當的平衡。我們研究了一種用於高解析度光學遙感影像中目標偵測的增強YOLOv5演算法,利用多層特徵金字塔、多重偵測頭策略和混合注意力模組來提高光學遙感影像的目標偵測網路的效果。根據SIMD資料集,新演算法的mAP比YOLOv5好2.2%,比YOLOX好8.48%,在偵測結果和速度之間達到了更好的平衡。 02背景&動機隨著遠感技術的快速發展,高解析度光學遠感影像已被用於描述地球表面的許多物體,包括飛機、汽車、建築物等。目標檢測在遠感影像的解釋中

命運方舟新地圖新版的開啟也是有著全新聲望的任務,除了羅溫地圖外還有一個日常是在智慧島的,前置的任務是從貝隆南開啟的,很多小伙伴做到“尋找有燭光閃耀的地方」這一環的時候就沒有指引的了,也是好奇具體的位置在哪,下面為大家帶來該任務的攻略!命運方舟尋找有燭光閃耀的地方任務攻略在智慧島裡面的房間當中,大廳還有個走廊,能夠進入到地下室,走進去就可以看到後續任務的位置了,如圖:

一、58畫像平台建置背景首先和大家分享下58畫像平台的建造背景。 1.傳統的畫像平台傳統的想法已經不夠,建立用戶畫像平台依賴數據倉儲建模能力,整合多業務線數據,建構準確的用戶畫像;還需要數據挖掘,理解用戶行為、興趣和需求,提供演算法側的能力;最後,還需要具備數據平台能力,有效率地儲存、查詢和共享用戶畫像數據,提供畫像服務。業務自建畫像平台和中台類型畫像平台主要區別在於,業務自建畫像平台服務單條業務線,按需定制;中台平台服務多條業務線,建模複雜,提供更為通用的能力。 2.58中台畫像建構的背景58的使用者畫像

PHP作為一種廣泛應用於Web開發領域的程式語言,提供了豐富的日期處理函數,可以輕鬆地對日期進行操作和計算。其中,快速確定某個日期是星期幾是常見且實用的需求。本文將介紹如何利用PHP中的函數來快速確定某個日期的星期幾,並提供具體的程式碼範例。 PHP中日期處理函數簡介PHP中關於日期處理的主要函數有date()、strtotime()、str
