[UVA 100] The 3n + 1 problem
UVa 100 - The 3n + 1 problem
題目描述 (Problem Description)
在電腦科學中,問題的困難度通常被分類。考慮以下這個簡單的演算法,用來產生一組數列:
- 輸入一個整數
n。 - 印出
n。 - 如果
n = 1,則停止。 - 如果
n是奇數,則n = 3n + 1。 - 如果
n是偶數,則n = n / 2。 - 重複步驟 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。
對於任意兩個整數 i 和 j,你的任務是計算在 i 和 j 之間(包含 i 與 j)的所有整數中,最大的週期長度是多少。
輸入說明 (Input)
輸入包含多組測試資料。每行包含一對整數 i 和 j。所有的整數都將小於 1,000,000 且大於 0。
你應該處理到檔案結束(EOF)為止。
輸出說明 (Output)
對於每對輸入的 i 和 j,你應該輸出一行,依序包含:原本的 i、j,以及在 i 與 j 之間(含)整數的最大週期長度。這三個數字之間應以一個空白隔開。
範例輸入 (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,在計算區間最大值時,請記得交換兩數,但輸出時仍須照原順序印出i和j。
評論