有兩個日期,計算兩個日期之間的天數,如果兩個日期是連續的,我們規定他們之間的天數為兩天。
輸入: 有多組輸入,每組資料有兩行,分別表示兩個日期,形式為yyyymmdd;
輸出: 每組資料輸出一行,即日期差值。
樣例輸入:
20110412
20110422
樣例輸出:
11
解析:將原問題統一到乙個確定的起點區間上去,比如0年1月1日,當我們輸入日期的時候計算出日期與起點區間的差,當我們計算兩個日期的差時只需要將它們與起點區間的差相減就ok了,這個做法可以先計算出每個日期與起點日期之間的差,當我們輸入日期的時候在o(1)的時間內可以查出當前日期與起點日期的差,相當於是用空間換取時間的做法。
注意:
閏年的判斷條件是:當年數如果不能被100整除但是能被4整除時為閏年或者當年數能被40整除時為閏年
實現的c++程式
#include
#include
#define isleapyear(x) (x % 100 != 0 && x % 4 == 0) || x % 400 == 0 ? 1 : 0
// 使用巨集定義來判斷一年是不是閏年
int dayofmonth[13]
[2]=
;struct date }}
};int buf[
5001][
13][32
];//儲存預處理的天數
intabs
(int x)
intmain()
int y1, m1, d1;
int y2, m2, d2;
while
(scanf
("%4d%2d%2d"
,&y1,
&m1,
&d1)
!=eof
)return0;
}
以上**簡析:
(1)將資料本身與資料的儲存位址聯絡起來,儲存日期的時候使用三維陣列,這樣訪問方便;(2)程式輸入採取了技巧,因為題目規定使用連續的8位資料,所以使用%4d來讀取前四位並賦值給year,後面的%2d%2d也是同樣的思路;(3)在main函式體外定義預處理陣列buf[5001][13][32],避免函式在執行的時候棧的空間不夠而出現棧溢位的情況。
給出乙個日期,求出這個時期是星期幾。
輸入樣例: 輸出樣例:
9 october 2001 tuesday
14 october 2001 sunday
解析:這個問題也同樣可以使用預處理的思路來解決,首先需要知道今天星期幾,給定日期與今天相比差幾天,利用這個數字對7求模,即可得出給定日期星期幾。
(1)c++實現程式如下所示:
#include
#include
#include
using
namespace std;
#define isleapyear(x) (x % 100 != 0 && x % 4 == 0) || x % 400 == 0 ? 1 : 0
char dayofmonth[13]
[2]=
;struct date}}
};char monthname[13]
[20]=
;char weekname[7]
[20]=
;int buff[
5001][
13][32
];intmain()
int year;
char month[20]
;int day;
while
(scanf
("%d%s%d"
,&day, month,
&year)
!=eof
)return0;
}
(2)zeller公式求解
歷史上的某一天是星期幾?未來的某一天是星期幾?關於這個問題,有很多計算公式(兩個通用計算公式和一些分段計算公式),其中最著名的是蔡勒(zeller)公式。即用公式:
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
公式中的符號含義如下,w:星期;c:世紀-1;y:年(後兩位數);m:月(m大於等於3,小於等於14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月來計算,比如2023年1月1日要看作2023年的13月1日來計算);d:日;[ ]代表取整,即只要整數部分。(c是世紀數減一,y是年份後兩位,m是月份,d是日數。1月和2月要按上一年的13月和 14月來算,這時c和y均按上一年取值。)算出來的w除以7,餘數是幾就是星期幾。如果餘數是0,則為星期日。
以2023年10月1日(100周年國慶)為例,用蔡勒(zeller)公式進行計算,過程如下:
蔡勒(zeller)公式:
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
=49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1
=49+[12.25]+5-40+[28.6]
=49+12+5-40+28
=54 (除以7餘5)即2023年10月1日(100周年國慶)是星期5。
c++++實現如下所示:
#include
#include
#include
using
namespace std;
char monthname[13]
[20]=
;char weekname[7]
[20]=
;int
main()
return0;
}
pyspark系列 日期函式
日期函式 from pyspark.sql.functions import current date spark.range 3 withcolumn date current date show id date 0 2018 03 23 1 2018 03 23 from pyspark.sql...
王道機考系列 資料結構
例1.括號匹配 例2.計算簡單表示式 哈夫曼樹的定義 在含有n個帶權葉子結點的二叉樹中,其中帶權路徑長度 wpl 最小的二叉樹稱為哈夫曼樹,也成為最優二叉樹。構造哈夫曼樹的演算法描述如下 給定n個權值分別為w1,w2,wn的節點。1 將這n個結點分別作為n棵樹僅含乙個結點的二叉樹,構成森林f.2 構...
王道機試 日期類問題
題目描述 有兩個日期,求兩個日期之間的天數,如果兩個日期是連續的我們規定他們之間的天數為兩天輸入 有多組資料,每組資料有兩行,分別表示兩個日期,形式為yyyymmdd輸出 每組資料輸出一行,即日期差值做題思路 樣例輸入 20110412 20110422樣例輸出 11對於日期類 年月日,就像學生資訊...