14. A - Doom's Day Algorithm (CPE22801, UVA12019) - CPE一顆星解答與說明
CPE一顆星49題解答 - pdf 電子檔,售價 199 元,
購買電子檔可將筆記與完整解答帶著走,
坐車、上課時皆可隨時複習,
不受網路或廣告影響,
若有需要請來信購買 greens2314@gmail.com
題目
- 計算 2011 年的某個日期為星期幾
輸入說明
- 第一行為測試資料的筆數
- 每一筆測試資料包含
- M 月份 : 1~12月
- D 日期 : 1~31號
輸出說明
- 計算出每一筆日期在 2011 年是星期幾
- 例如 2011/1/6 是星期四,而印出 Thursday
解題技巧
- 熟記每個月份的天數
- 由題目可知1/6 為星期四,可推得 1/1 是星期六
- 1/1 是星期六,則 3/16 為禮拜幾?
- 計算 1/1(包含) ~ 3/16 的總天數 = 74天
- 31 (1月的天數) + 28 (2月的天數) = 59天
- 59 + 16 (3月的天數) = 75天
- 推算星期的方式
- 一星期為 7 天
- 以 1/1 的星期六為 2011 年的第一天
- 75 天除以 7 天 = 10 個星期又 5 天
- 從星期六(包含)開始往後推 5 天
- 可得 3/16 為星期三
- 陣列宣告與讀取
- 索引起始值從 0 開始
解題過程
取得輸入
- 取得資料筆數,使用 nextInt()
- 根據資料筆數,使用 for 迴圈讀取資料
- 讀取月份與日期 nextInt()
宣告陣列,儲存每個月的天數
- 用來計算日期的總天數
- int months[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
宣告陣列,儲存星期的英文單字
- 用來印出計算結果
- String weeks[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
- 宣告總天數變數 totalDay
- 步驟一,處理月
- 使用 for 迴圈加總測試日期從1月開始經過的月份天數
- 例如:測試日期為 4/16
- 經過 4月份之前 (到 4 月的上個月止)的總天數:
- 31(一月:索引0) + 28 (二月:索引1) + 31 (三月:索引2) = 90 天
- 步驟二,處理日
- 加上測試日期在當月的日期天數
- 步驟一只有累加到 1 ~ 3 月份的天數
- 請將 4 月的日期,累加到總天數中
印出計算結果
- 使用餘數當作陣列索引位置,讀取星期陣列並印出值
留言
張貼留言