[UVA 100] The 3n + 1 problem


提交解答

分數: 1
時間限制: 1.0s
記憶體限制: 256M

作者:
題目代碼
題目類型
允許的語言
C, C++

UVa 100 - The 3n + 1 problem

題目描述 (Problem Description)

在電腦科學中,問題的困難度通常被分類。考慮以下這個簡單的演算法,用來產生一組數列:

  1. 輸入一個整數 n
  2. 印出 n
  3. 如果 n = 1,則停止。
  4. 如果 n 是奇數,則 n = 3n + 1
  5. 如果 n 是偶數,則 n = n / 2
  6. 重複步驟 2。

例如,給予輸入值 22,會產生如下數列: 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1

目前推測(但尚未被證明)對於任何整數 n,這個演算法最後都會停在 n = 1(這就是著名的 Collatz Conjecture)。在這個問題中,我們定義一個數的 「週期長度」(cycle-length) 為該數列直到包含 1 在內所產生的整數個數。在上面的例子中,22 的週期長度為 16。

對於任意兩個整數 ij,你的任務是計算在 ij 之間(包含 ij)的所有整數中,最大的週期長度是多少。


輸入說明 (Input)

輸入包含多組測試資料。每行包含一對整數 ij。所有的整數都將小於 1,000,000 且大於 0。

你應該處理到檔案結束(EOF)為止。

輸出說明 (Output)

對於每對輸入的 ij,你應該輸出一行,依序包含:原本的 ij,以及在 ij 之間(含)整數的最大週期長度。這三個數字之間應以一個空白隔開。


範例輸入 (Sample Input)
1 10
100 200
201 210
900 1000
範例輸出 (Sample Output)
1 10 20
100 200 125
201 210 89
900 1000 174

💡 小提醒: 在實作時要特別注意,題目並未保證 i 一定小於 j。如果輸入 i > j,在計算區間最大值時,請記得交換兩數,但輸出時仍須照原順序印出 ij


評論

目前沒有評論。