×
解除綁定,重新設定系統帳號的密碼
您的系統帳號 ID:
您的系統帳號:
您的帳號暱稱:
設定新密碼:
設定新密碼:
×
請輸入要加入的「課程代碼」
請向開設課程的使用者索取「課程代碼」
分類題庫
解題動態
排行榜
討論區
競賽區
登入
註冊
發表新討論
解題報告
#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