程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 3038 3n+1問題

3038 3n+1問題

編輯:關於C++

3038 3n+1問題。本站提示廣大學習愛好者:(3038 3n+1問題)文章只能為提供參考,不一定能成為您想要的結果。以下是3038 3n+1問題正文


3038 3n+1問題

 

 時間限制: 1 s  空間限制: 32000 KB  題目等級 : 白銀 Silver       題目描述 Description 3n+1問題是一個簡單有趣而又沒有解決的數學問題。這個問題是由L. Collatz在1937年提出的。克拉茲問題(Collatz problem)也被叫做hailstone問題、3n+1問題、Hasse算法問題、Kakutani算法問題、Thwaites猜想或者Ulam問題。 問題如下: (1)輸入一個正整數n; (2)如果n=1則結束; (3)如果n是奇數,則n變為3n+1,否則n變為n/2; (4)轉入第(2)步。 克拉茲問題的特殊之處在於:盡管很容易將這個問題講清楚,但直到今天仍不能保證這個問題的算法對所有可能的輸入都有效——即至今沒有人證明對所有的正整數該過程都終止。   輸入描述 Input Description

第一行是一個整數T.表示輸入數據的組數.

第二行是T個正整數n.

輸出描述 Output Description

對於每個正整數n,每行輸出一個數s,表示n通過多少步變換會變成1,如果n無法變成1,則輸出-1.

樣例輸入 Sample Input

3

1 2 3

樣例輸出 Sample Output

0

1

7

數據范圍及提示 Data Size & Hint

1 <= T <= 100

1 <= n <= 10000

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 using namespace std;
 5 int tot=0;
 6 int hasse(int x)
 7 {
 8     
 9     if(x==1)return tot;
10     if(x<1)return -1;
11     if(x%2==1)
12     {
13         tot++;
14         hasse(3*x+1);
15     }
16     else 
17     {
18         tot++;
19         hasse(x/2);
20     }
21 }
22 int main()
23 {
24     int n;
25     cin>>n;
26     for(int i=1;i<=n;i++)
27     {
28         tot=0;
29         int x;
30         cin>>x;
31         cout<<hasse(x)<<endl;
32     }
33     return 0;
34 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved