44. Minesweeper (CPE10418, UVA10189) - CPE一顆星解答與說明

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

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

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

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

不受網路或廣告影響,

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

題目

  • 踩地雷,統計相鄰的地雷數量
  • 地雷數量最多為 8
  • 相鄰的格子有 8 個



輸入說明


  • 資料有多筆
    • 第一行
      • 地圖格子行數(可視為高度) n
      • 地圖格子欄數(可視為寬度) m
    • 有 n 行
      • 有 m 個字元代表格子中的資料
        • * 號:地雷
        • .  號:安全的地點
  • 如果 n 與 m 為 0 則結束計算



輸出說明


  • 印出每筆測資的編號
  • 將 . 號(安全的位置) 改印出地雷的數量
  • 資料之間要以空行隔開



解題技巧

  • 二維陣列
  • 索引位置
  • 字元判斷



解題過程

取得輸入

  • 使用 while 偵測是否有輸入
    • 取得地圖高度與寬度
    • 判斷高度與寬度是否等於 0 ,若等於 0 則呼叫 break 結束計算
    • 使用 for 迴圈根據高度讀取多筆字串
      • 使用 for 迴圈根據寬度讀取字串中的每一個字元,呼叫 String 提供的 charAt() 方法


準備統計地雷數量

  • 宣告 counts 二維陣列,紀錄格子周圍的地雷數量
  • 判斷讀取到的字元是否為 * 號,表示此位置是地雷
    • 將地雷位置的數量設為 9 ,用來辨識此位置為地雷,正常的地雷數量最多為 8
    • 宣告地雷周圍的位置
      • 高度 - 1  ~ 高度 + 1
      • 寬度 - 1  ~ 寬度 + 1



統計地雷數量 

  • 逐一讀取地雷周邊的位置
    • 使用 for 迴圈讀取周圍的高度
      • 使用 for 迴圈讀取周圍的寬度
        • 判斷想要讀取的索引位置是否介於 0 ~小於高度與寬度之間
          • 若介於表示是合法的位置,若不介於則會引發例外錯誤
            • 將地雷周圍位置的數量 + 1



印出編號與特殊換行

  • 宣告 caseNumber 變數用來統計測試資料的編號
  • 當測試資料不是第一筆時,要多印一空白行
  • 印出編號

 


印出地雷數量

  • 逐一讀取高度寬度位置,準備讀取二維陣列內的地雷數量
    • 使用 for 迴圈根據高度,逐一讀取高度位置
      •  使用 for 迴圈根據寬度,逐一讀取寬度位置
        • 判斷數量是否大於 8 
          • 若大於 8 表示為地雷,印出星號
          • 若小於 8 印出此位置的周圍含有的地雷數量


解答/答案/註解/程式碼/JAVA

解答最外層請自行 import 相關套件與新增 main class

public class main {
    //解答
}





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

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

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

不受網路或廣告影響,

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

留言

這個網誌中的熱門文章

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

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

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