15. Jolly Jumpers (CPE10405, UVA10038) - CPE一顆星解答與說明

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

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

明年將調漲至 199 元!

購買電子檔可將筆記帶著走,

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

不受網路或廣告影響,

若有需要可來信 greens2314@gmail.com


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

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

public class main {
    //解答
}

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

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

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

不受網路或廣告影響,

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



題目


  • 判斷數列是否為 jolly jumper
    • 兩兩數值相減取絕對值,差值為 1 ~ n - 1
    • 數列:1 4 2 3,4 個數字,n = 4
      • | 1 – 4 | = 3
      • | 4 – 2 | = 2
      • | 2 – 3 | = 1
      • 差值:1, 2, 3,為 1 ~ 3 (4 - 1) 之間,故為 Jolly Jumpers


輸入說明


  • 每一行包含數字 N ,表示接下來有 N 個數字


    輸出說明


    • 根據每行輸入,計算出是否為 Jolly Jumpers



    解題技巧

    • 了解 Set 集合介面的用法
      • 不允許擺放相同的資料
      • 元素具有唯一性的集合
        • 符合題目的需求,可收集到具有唯一性的兩數差值
      • 實做
        • HashSet implements Set
          • 無順序
        • TreeSet implements Set
          • 有順序
          • 以下兩種宣告方法都可以
            • Set<Integer> sets = new TreeSet<Integer>();
            • TreeSet<Integer> sets = new TreeSet<Integer>();

    • 兩數相減,取絕對值
      • 呼叫 Math.abs()方法


    解題過程

    取得輸入

    • 使用 while 偵測是否有數字輸入,使用 hasNextInt()
    • 取得資料筆數,使用 nextInt() 
      • 使用根據資料筆數
        • 宣告相同長度陣列來儲存測試數字
        • 使用 for 迴圈讀取測試數字,並存入陣列中


    使用 for 迴圈讀取測試數字的陣列,進行兩數相減

    • 迴圈內要做的處理
      • 目前的索引位置的數值 減掉 下 1 個索引位置的數值
      • 取絕對值,呼叫 Math 類別提供的 abs() 方法
    • 在 for 迴圈的條件式要小於資料筆數減 1 , 若條件式為小於資料筆數沒有減 1 的話, 會遇到 ArrayIndexOutOfBoundsException
      • 例如:資料筆數為 2,測試數字陣列長度為 2,索引分別為 0 與 1
        for (int i = 0; i < 2 ; i++) 
        • 索引位置 0 的值 減 索引位置 1 的值 
        • 索引位置 1 的值 減 索引位置 2 的值 ,這邊讀取索引 2 時會引發 ArrayIndexOutOfBoundsException
      • 要寫 for (int i = 0; i < 2 - 1; i++) 才是正確的



    判斷計算結果是否介於 1 ~ 資料筆數 - 1 之間

    • 若介於 1 ~ 資料筆數 - 1 才符合 Jolly Jumpers 的定義
    • 宣告 TreeSet ,儲存兩數相減的結果
      • TreeSet<Integer> sets = new TreeSet<Integer>();
    • 將計算結果存入 TreeSet 集合中,呼叫 add() 方法


    判斷 TreeSet 的大小是否等於資料筆數 - 1 

    • Jolly Jumpers 的定義
      • 某一數列中兩兩數列相減的絕對值的數值會介於 1 ~ 資料筆數 - 1 
        • 例如 5 個數值,其兩兩相減的數值會有 4 (5-1)個:1, 2, 3, 4 (5-1)
        • 例如 8 個數值,其兩兩相減的數值會有 7 (8-1)個:1, 2, 3, 4, 5, 6, 7 (8-1)
      • 只須判斷 TreeSet 中的數值數量是否為資料筆數 - 1 可推得是否符合定義
    • TreeSet 儲存的資料筆數,呼叫 size() 方法


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

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

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

    不受網路或廣告影響,

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

    留言

    這個網誌中的熱門文章

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

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

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