---
# System prepended metadata

title: 19-4 3N+1-1
tags: [DICE C]

---

---
tags: DICE C
---

19-4 3N+1-1
===

> [name=CHAWTeam]

目錄：[DICE C語言程式破解](https://hackmd.io/@CHAWTeam/DiceC)

題目
---

```!
考慮到下面的演算法：

輸入一個整數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
```

程式碼
---

```c=
#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上的所有筆記](https://hackmd.io/@CHAWTeam)
目錄：[DICE C語言程式破解](https://hackmd.io/@CHAWTeam/DiceC)

---

{%hackmd Iiu5mOixR7yWkPHKCkabBg %}
<iframe class="LikeCoin" height="235" src="https://button.like.co/in/embed/chawteam/button?referrer=https://hackmd.io/@CHAWTeam/DiceC-19-4" width="100%"></iframe>

---

{%hackmd i1nMRrZcTFmTvoF897K9zg %}