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乙級1004 成績排名 (20分)(C語言版)及解析C語言
- PAT-B 1005 繼續(3n+1)猜想【陣列】陣列
- PAT 1005 繼續(3n+1)猜想 python程式碼滿分Python
- 【PAT乙級】1048 數字加密加密
- 7-1 素數對猜想(C語言)C語言
- 【PAT乙級、C++】1024 科學計數法 (20分)C++
- 利用C語言驗證哥德巴赫猜想C語言
- PAT乙級——1093(字串匹配)Java實現字串匹配Java
- PAT乙級比賽-互評成績計算
- PAT乙 1041 考試座位號 (15分)(C C++)C++
- PAT 乙級 1094 谷歌的招聘 (20分)---【素數 字串】谷歌字串
- PAT-B 1059 C語言競賽【模擬】C語言
- 菜鳥記錄:c語言實現PAT甲級1010--RadixC語言
- PAT Basic 1057. 數零壹(20)(C語言實現)C語言
- PAT乙級——1092(陣列排序 自定義sort)Java實現陣列排序Java
- soj-1001. NFA識別語言
- C語言 資料的位級表示及操作C語言
- Linux核心C語言將升級LinuxC語言
- PAT 2023 冬 乙 方格填數
- C語言 C語言野指標C語言指標
- C語言---“C語言 誰與爭鋒?”C語言
- 輕量級多級選單控制框架程式(C語言)框架C語言
- C語言與嵌入式C語言的區別C語言
- C語言的本質(32)——C語言與彙編之C語言內聯彙編C語言
- C語言的HelloWorldC語言
- go語言與c語言的相互呼叫GoC語言
- C語言C語言
- C語言實現多級濾波—乾貨C語言
- 《明解C語言》中級篇 第8章C語言
- C語言入門級練習(敲程式碼)C語言
- 聊聊C語言/C++—程式和程式語言C語言C++
- 奇怪的C語言——C51程式設計C語言注意事項C語言程式設計
- 第一章 聯言命題選言命題及其推理-聯言命題性質
- 第一章 聯言命題選言命題及其推理-選言命題性質
- c語言巨集的使用C語言
- c語言的陣列C語言陣列
- C語言#error的作用C語言Error
- 有用的C語言工具C語言