1. 程式人生 > >CCF 1030. 角谷猜想

CCF 1030. 角谷猜想

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;
}