程式設計挑戰 3n 1問題(不完全實現)改一

2021-06-22 06:03:11 字數 966 閱讀 9909

題目詳情

對任何乙個自然數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為偶數,那麼下乙個數...