PAT乙級1001 || 害死人不償命的(3n+1)猜想(C語言)
害死人不償命的(3n+1)猜想
題目描述:
卡拉茲(Callatz)猜想:
對任何一個正整數 n,如果它是偶數,那麼把它砍掉一半;如果它是奇數,那麼把 (3n+1) 砍掉一半。這樣一直反覆砍下去,最後一定在某一步得到 n=1。卡拉茲在 1950 年的世界數學家大會上公佈了這個猜想,傳說當時耶魯大學師生齊動員,拼命想證明這個貌似很傻很天真的命題,結果鬧得學生們無心學業,一心只證 (3n+1),以至於有人說這是一個陰謀,卡拉茲是在蓄意延緩美國數學界教學與科研的進展……
我們今天的題目不是證明卡拉茲猜想,而是對給定的任一不超過 1000 的正整數 n,簡單地數一下,需要多少步(砍幾下)才能得到 n=1輸入格式:
每個測試輸入包含 1 個測試用例,即給出正整數 n的值。
輸出格式:
輸出從 n 計算到 1 需要的步數。
輸入樣例:
3
輸出樣例:
5
題目來源:PAT乙級1001
作者:CHEN, Yue
單位:浙江大學
問題解決
解題思想
用遞迴的方法,設定一個全域性變數,用於統計砍的步數。n=1時直接返回;n=偶數時加一步,然後除以2;n=奇數時乘以3加1後遞迴呼叫函式繼續計算。
程式碼示例
#include <stdio.h>
int count=0;//使用全域性變數在遞迴呼叫中統計砍的次數
void Count(int n);
int main()
{
int n;
scanf("%d",&n);
Count(n);
printf("%d\n",count);
return 0;
}
void Count(int n)
{
if(n==1){
return;
}
else if(n%2==0){
count++;
Count(n/2);
}
else{
Count(3*n+1);
}
}
相關文章
- [PAT B] 1001 害死人不償命的 (3n+1) 猜想
- PAT (Basic Level) Practice 1001 害死人不償命的(3n+1)猜想
- 1001 害死人不償命的(3n+1)猜想
- 1001 害死人不償命的(3n+1)猜想
- 1001 callatz猜想 害死人不償命的(3n+1)猜想
- PAT-B 1001 害死人不償命的(3n+1)猜想【模擬】
- 1001 害死人不償命的(3n+1)猜想 PTA
- PAT B1001 害死人不償命的(3n+1)猜想(簡單模擬)
- PAT乙級1004 成績排名 (20分)(C語言版)及解析C語言
- PAT 乙級
- PAT乙級1023
- PAT-B 1005 繼續(3n+1)猜想【陣列】陣列
- PAT 1005 繼續(3n+1)猜想 python程式碼滿分Python
- 【PAT乙級】1027 列印沙漏
- 【PAT乙級】1017 A除以B
- 【PAT乙級】1065 單身狗
- 【PAT乙級】1052 賣個萌
- 【PAT乙級】1048 數字加密加密
- 【PAT乙級】1066 影像過濾
- 7-1 素數對猜想(C語言)C語言
- 【PAT乙級、C++】1024 科學計數法 (20分)C++
- [PAT B] 1005 繼續 (3n+1) 猜想 (沒做出來幫我看看咋整)
- 菜鳥記錄:c語言實現PAT甲級1010--RadixC語言
- 利用C語言驗證哥德巴赫猜想C語言
- PAT乙級——1093(字串匹配)Java實現字串匹配Java
- 【PAT乙級】1021 個位數統計
- PAT乙級 | 1086 就不告訴你 (15分)
- PAT 乙級 1094 谷歌的招聘 (20分)---【素數 字串】谷歌字串
- soj-1001. NFA識別語言
- PAT乙 1041 考試座位號 (15分)(C C++)C++
- PAT-B 1059 C語言競賽【模擬】C語言
- PAT:1001 A+B Format (20分)ORM
- 1005 繼續(3n+1)猜想 (25分)
- PAT乙級比賽-互評成績計算
- [PAT B] 1007 素數對猜想
- PAT乙級——1092(陣列排序 自定義sort)Java實現陣列排序Java
- Linux核心C語言將升級LinuxC語言
- pat乙級自我回顧:一般錯誤出現原因