1293. 3n+1數鏈問題

來源:互聯網
上載者:User

1293. 3n+1數鏈問題

Description

在電腦科學上,有很多類問題是無法解決的,我們稱之為不可解決問題。然而,在很多情況我們並不知道哪一類問題可以解決,那一類問題不可解決。現在我們就有這樣一個問題,問題如下:

1.       輸入一個正整數n;

2.       把n顯示出來;

3.       如果n=1則結束;

4.       如果n是奇數則n變為3n+1 ,否則n變為n/2;

5.       轉入第2步。

例如對於輸入的正整數22,應該有如下數列被顯示出來:

22  11  34  17  52  26  13  40  20  10  5  16  8  4  2  1

 

我們推測:對於任意一個正整數,經過以上演算法最終會推到1。儘管這個演算法很簡單,但我們仍然無法確定我們的推斷是否正確。不過好在我們有電腦,我們驗證了對於小於1,000,000的正整數都滿足以上推斷。

對於給定的正整數n,我們把顯示出來的數的個數定義為n的鏈長,例如22的鏈長為16。

       你的任務是編寫一個程式,對於任意一對正整數ij,給出ij之間的最長鏈長,當然這個最長鏈長是由ij之間的其中一個正整數產生的。我們這裡的ij之間即包括i也包括j。

 

Input

輸入檔案只有一行,即為正整數ijij之間以一個空格隔開。0 < i ≤ j < 10,000。

Output

檔案只能有一行,即為ij之間的最長鏈長。

Sample Input

1 10
Sample Output

20
Problem Source

ZSUACM Team Member

// source code of submission 980902, Zhongshan University Online Judge System#include <iostream>using namespace std;int LnkLength( int n){     int Length = 1;     while (n!=1)     {         if ( n % 2 == 1 )               n = 3*n + 1;         else              n=n>>1;          ++Length;     }     return Length;}int main(){    int i,j,max = 0;    cin >> i >> j;    for(int m = i;m <= j;m++)    {        if (LnkLength(m) >= max)            max = LnkLength(m);    }    cout << max << endl;    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.