14. A - Doom's Day Algorithm (CPE22801, UVA12019) - CPE一顆星解答與說明

   👉  CPE 一顆星選集列表(49題) 題目說明與解答

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 月的日期,累加到總天數中

計算星期

  • 總天數 除以 7 (一週7天),取餘數,使用 %
    • 餘數會介於 0 ~ 6 之間,剛好可對應星期陣列的索引 



印出計算結果

  • 使用餘數當作陣列索引位置,讀取星期陣列並印出值

調整星期索引

  • 由題目可知1/6 為星期四
  • 但目前執行結果卻是 Saturday 禮拜六

  • 須將星期索引統一 + 5 天,計算結果才會是禮拜四






CPE一顆星49題解答 - pdf 電子檔,售價 199 元,

購買電子檔可將筆記與完整解答帶著走,

坐車、上課時皆可隨時複習,

不受網路或廣告影響,

若有需要請來信購買 greens2314@gmail.com

留言

這個網誌中的熱門文章

CPE 一顆星選集題目說明與解答 - Java 筆記與心得分享

Visual Studio 自動排版格式化程式碼

1. Vito's family (CPE10406, UVA10041) - CPE一顆星解答與說明