CCF 1030. 角谷猜想
阿新 • • 發佈:2018-12-27
1030. 角谷猜想 (Standard IO)
時間限制: 1000 ms 空間限制: 262144 KB 具體限制
題目描述
角谷猜想又稱冰雹猜想。它首先流傳於美國,不久傳到歐洲,後來由一位叫角谷的日本人帶到亞洲。因為被稱為角谷猜想。
通俗地講,角谷猜想的內容是這樣的:任意給定一個自然數n,當n是偶數時,將它除以2,即將它變成n/2;當n是奇數時,就將它變成3n+1,……,若干步後,總會得到1。
在上述演變過程中,將每一次出現的數字排列起來,就會出現一個數字序列。
我們現在要解決的問題是:對於給定的n,求出數字序列中第一次出現1的位置。
輸入
輸入一個自然數n。
輸出
輸出序列中第一次出現1的位置。
樣例輸入
6
樣例輸出
9
資料範圍限制
1<=n<2^31
提示
數字的變化過程如下:
6→6÷2→3→3×3+1→10→10÷2→5→5×3+1→16→16÷2→8→8÷2→4→4÷2→2→2÷2→1
所形成的數字序列為:
6 3 10 5 16 8 4 2 1
1位於數字數列的第9個位置。
-----------------------------------------------------------------------------------
問題分析
這個問題初看沒有太大的難度,做了一遍之後發現只得了80分,再仔細一看資料的範圍,才明白n要wget使用long型才可以,否則的話就會產生溢位。
程式碼如下:
#include <iostream>
using namespace std;
int main()
{
long n;
int k=1;
cin >> n;
while(n!=1)
{
k++;
if(n%2 == 0)
n /= 2;
else
n = 3*n + 1;
}
cout << k;
return 0;
}