19-4 3N+1-1

CHAWTeam

目錄:DICE C語言程式破解

題目

考慮到下面的演算法:

輸入一個整數n,依據以下規則,輸出其結果。

如果n是奇數,則n=3n+1,
其餘的狀況,則n=n/2,
當n等於1時停止。 
例如,輸入22,則會印出下列的數列: 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

上面這個演算法,目前被推測認為在給予任何整數輸入值時皆可以停下來(也就是說最後都能夠輸出1)。
儘管這個演算法還蠻簡單的,但卻無法確定這個推測是否是正確的;
然而可以確定的是,在輸入值n介於0到1,000,000之間時,這個推測是正確的
(實際上,還有比0到1,000,000更多的輸入值也是可以讓演算法停下來)。

輸入一個整數n,列出其迴圈數,程式重複輸入,直到輸入的n小於等於0才停止。

輸入範例:
10
9
8
7
6
-999

輸出範例:
10 5 16 8 4 2 1
9 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
8 4 2 1
7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
6 3 10 5 16 8 4 2 1

程式碼

#include <stdio.h> int san_n_jia_i(int n) { if (n == 1) return 1; else if (n % 2 == 0) return n / 2; else if (n % 2 == 1) return 3 * n + 1; } int main() { int n = 1; while (n > 0) { scanf("%d", &n); if (n > 0) { printf("%d ", n); while (n != 1) { n = san_n_jia_i(n); printf("%d ", n); } printf("\n"); } } return 0; }

執行

輸入

10
9
8
7
6
-999

輸出

10 5 16 8 4 2 1
9 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
8 4 2 1
7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
6 3 10 5 16 8 4 2 1

查看我們在HackMD上的所有筆記
目錄:DICE C語言程式破解


👉【幫我們一個忙!】👈

👋如果您喜歡這篇文章,請在下方按5個Like!
❤您的支持是我們最大的動力!

您只要登入帳號(Facebook、Google),在下方按5個Like,我們就會收到來自LikeCoin基金會的贊助。
您只需要支持我們,完全不會花到錢!