#16571: 完整解題講解


arthur987t (李王2018)

學校 : 樹德科技大學
編號 : 85497
來源 : [118.163.233.130]
最後登入時間 :
2019-09-09 14:46:29
a263. 日期差幾天 -- 板橋高中練習題 | From: [59.127.201.83] | 發表日期 : 2019-01-15 18:24

要解這一題呢

首先先從基本觀念說起,第一點:別用甚麼日期相減!,而是透過輸入的日期,直接將天數做一個加總!

比如說:2015 11 11 就是把 2015*365 + 11*30+11 這樣儲存起來,然後讓得出的2個日期的天數總和(日期一&日期二)

進行相減,再用絕對值輸出即可。

會遇到的陷阱!

這題的陷阱 我只能說 多到爆炸! 但不用擔心 我們在這一一解開,首先呢就是最基本的

一、12月份天數不同 分別為:{31,28,31,30,31,30,31,31,30,31,30,31 } 因此不可在加總時 通通都當作30或31天。

二、有潤年之分!,當今天題目的所輸入的測資年分相差過大時,就一定會有潤年的產生(閏年定義自行google),那當遇到閏年時,我們就必需將那一年計算為366天,因此在進行年的天數加總時,也不可通通視為365天。

三、計算天數時,當年合當月 都不可計算!也就是說 當假設今天日期為1999年1月1號好了,那請問 1999年過完了嗎? 答案是還沒 他才到1月而已,那以此類推 今年的一月過完了嗎? 是不是也還沒 才過到一號而已,那你會想 有差嗎 反正2邊一起計算 最後相差值不也應該一樣嗎?, 答案是 錯的 為何? 因為如過假設有一組測資 是輸入 (2000 2 1)和(2010 2 1) 那會發生甚麼事呢? 那會變成 因為2000年是閏年 你的程式會先加366 那在後來的月份上 你以為2月過了 所以又加上29 那最後得出就是你多加了一天!,因此 你會在最後的結果中 與正確答案 相差了一天!。 

好啦 到這為止 個人心得:這題程式結構和邏輯其實都不難(中間程度) 但是大多數的人卻往往被一些小陷阱給騙到了 所以才會寫到發瘋(包括小弟我) 祝大家解題順利!~

 

 

 

 

 
ZeroJudge Forum