程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> PAT乙級真題1001. 害死人不償命的(3n+1)猜想 (15)(解題),pat3n

PAT乙級真題1001. 害死人不償命的(3n+1)猜想 (15)(解題),pat3n

編輯:關於C語言

PAT乙級真題1001. 害死人不償命的(3n+1)猜想 (15)(解題),pat3n


卡拉茲(Callatz)猜想:

對任何一個自然數n,如果它是偶數,那麼把它砍掉一半;如果它是奇數,那麼把(3n+1)砍掉一半。這樣一直反復砍下去,最後一定在某一步得到n=1。卡拉茲在1950年的世界數學家大會上公布了這個猜想,傳說當時耶魯大學師生齊動員,拼命想證明這個貌似很傻很天真的命題,結果鬧得學生們無心學業,一心只證(3n+1),以至於有人說這是一個陰謀,卡拉茲是在蓄意延緩美國數學界教學與科研的進展……

我們今天的題目不是證明卡拉茲猜想,而是對給定的任一不超過1000的正整數n,簡單地數一下,需要多少步(砍幾下)才能得到n=1?

輸入格式:每個測試輸入包含1個測試用例,即給出自然數n的值。   輸出格式:輸出從n計算到1需要的步數。     輸入樣例: 3     輸出樣例: 5

code:

 

 1 #include<stdio.h>
 2 int main()
 3 {
 4   int n=0;//接收預判斷的n;
 5   int i=0;//保存計算的步數;
 6   scanf("%d",&n);
 7   while(n!=1)//如果沒有得到1,則一直切;
 8   {
 9     if(n%2==0)
10     {
11       n/=2;
12     }
13     else
14     {
15       n=(3*n+1)/2;
16     }
17     i++;
18   }
19   printf("%d",i);
20   return 0;
21 }
/*編譯環境********** vc++6.0(32位) *************/

 

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