題目詳情
對任何乙個自然數n,如果它是偶數,那麼把它砍掉一半;如果它是奇數,那麼把(3n+1)砍掉一半。這樣一直反覆砍下去,最後一定在某一步得到n=1。卡拉茲在2023年的世界數學家大會上公布了這個猜想,傳說當時耶魯大學師生齊動員,拼命想證明這個貌似很傻很天真的命題,結果鬧得學生們無心學業,一心只證(3n+1),以至於有人說這是乙個陰謀,卡拉茲是在蓄意延緩美國數學界教學與科研的進展……
我們今天的題目不是證明卡拉茲猜想,而是對給定的任一不超過1000的正整數n,簡單地數一下,需要多少步(砍幾下)才能得到n=1?
輸入格式:
多組資料,每行乙個整數0
輸出格式:
每行乙個數,表示結果。
思路分析:
因為輸入的數值的個數是不確定的,所以我定義了乙個陣列
a[1000]
來應對最多輸入量為1000的最壞結果。
然後,我們需要乙個標識
flag
來確定執行的次數(即砍了多少步)。
接下來,就是判斷語句(判斷使用者是否輸入完畢):
while(scanf("%d",&a[i])!=eof)
此處不用再另設乙個值退出迴圈,輸入ctrl+z便可結束迴圈。這裡是當使用者輸入數字0時,便認定使用者結束輸入。
最後是根據輸入的數值的奇偶性來進行不同的操作:
while(a[j]!=1)
演算法的大體核心如上所示,接下來是完整**:
#includeint main()
for(int j=0;j
執行結果:
程式設計挑戰 回文數(不完全實現)
題目詳情 njzy學習了回文串後聯想到了回文數,他希望統計出乙個區間內的所有回文數。現在給定乙個閉區間 a,b 求這個區間裡有多少個回文數。比如 20,30 只有乙個回文數那就是22.輸入描述 輸入包含多組測試資料,每組測試資料報含兩個整數a,b,0 思路分析 此問題較簡單,只要宣告乙個判斷回文數的...
挑戰程式設計 3N 1題目答案
3n 1問題 題目要點說明 題目本身是簡單的,只需要按要求求出數列並求和,但是題目有兩點很容易讓人忽略的地方。1.輸入的i,j不一定是i 以下是我寫的原始碼 the 3n 1 problem include include using namespace std int countloop int ...
3n 1數列問題
time limit 1000ms memory limit 65536k 有一天小標遇到了經典的3n 1數鏈問題,他想知道3n 1數鏈的前k個數是多少。下面小標來給你介紹一下3n 1數鏈是什麼,給定乙個數n,如果n為偶數,那麼下乙個數n1 n 2 否則n1 3 n 1 如果n1為偶數,那麼下乙個數...