4. The 3n + 1 problem (CPE10400, UVA100) - CPE一顆星解答與說明

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



題目



    i ~ j 之間的數字,各自帶入公式後,產生的數列,最大長度是多少?

輸入說明


    每一行包含:
    數字 i
    數字 j



輸出說明



    輸出 i 與 j 與最大的數列長度,中間以空白隔開



解題技巧

  • 兩個變數交換
  • 持續執行公式,值到符合特定條件為止
  • 奇數偶數判斷
  • 計算過程中更新最大值

解題過程

取得輸入

判斷數字 i 與數字 j 的大小

  • 統一讓 i 小於 j,後續產生 i ~ j 數字時,for 迴圈的條件式才能由小至大產生數字
  • 若 i 大於 j ,則將兩數交換
    • 交換過程,需多宣告一個變數來暫存,否則會有數值被覆蓋掉而無法完成交換

計算數列個數

  • 使用 for 迴圈,產生 i ~ j (包含自己) 的數字
    • 避免修改到 for 迴圈的變數 n,另外新增一個 number 變數來進行公式運算
    • 根據題意,數字要運算到 1 才停止
      • 使用 while 迴圈實作計算,當數字大於 1 時須不斷計算
      • 判斷數字是否為偶數 (除以2於0),將數字帶入不同的公式中
      • 每次計算都會產生一個數字,使用 count 變數來記錄總共產生幾個數字
        • 注意:數列會包含原始數字, count 變數初始值要從 1 開始


計算最長數列的長度與印出結果

  • 在 for 迴圈內檢查 count 變數是否大於 max 變數,若大於則更新



留言

這個網誌中的熱門文章

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

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

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