0

入力として整数を取得するにはどうすればよいですか。その出力は、その数値に続くコラッツシーケンスになります。このシーケンスは、次のルールによって計算されます。

  • n が偶数の場合、次の数字はn/2
  • n が奇数の場合、次の数字は3n + 1です。

例: 11 で始まる場合

11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

これは私のコードです:

n = int(raw_input('insert a random number'))

while n > 1:
    if n%2 == 0:
        n_add = [n/2]
        collatz = [] + n_add
    else:
        n_add2 = [3*n + 1]
        collatz = [] + n_add2 
        print collatz

これを実行して数値を挿入しても、何も起こりません。

4

5 に答える 5

1

数値 n を変更することはないため、毎回同じになります。また、数字が奇数の場合にのみ印刷しています。また、角括弧[]は配列を示します-これであなたの目標が何であるかわかりません。私はおそらく次のように書き直します:

n = int(raw_input('insert a random number'))

while n > 1:
    if n%2 == 0:
        n = n/2
    else:
        n = 3*n + 1
    print n

私が行っていることとあなたの指示を比較対照するために、少し時間がかかるかもしれません.print

それらが出てきたときにそれらを印刷したいのか、それともそれらをすべて集めて最後に印刷したいのか、あなたのコードからは少し不明確です。

于 2014-11-06T20:01:32.840 に答える
1

毎回変更する必要がありますn。これにより、必要なことが行われます。

n = int(raw_input('insert a random number'))   
while n > 1:
    n = n / 2 if not n & 1 else 3 * n + 1 # if  last bit is not set to 1(number is odd) 
    print n

## -- End pasted text --
insert a random number11
34
17
52
26
13
40
20
10
5
16
8
4
2
1

独自のコードを使用して、各 n を出力するだけです。

n = int(raw_input('insert a random number'))

while n > 1:
    if n % 2 == 0:
        n = n / 2
    else:
        n = 3 * n + 1
    print n

または、すべてをリストに入れて、最後に出力します。

all_seq = []
while n > 1:
    if n % 2 == 0:
        n = n / 2
    else:
        n = 3 * n + 1
    all_seq.append(n)
print(all_seq)
于 2014-11-06T20:34:38.020 に答える