1

同じ数の 2 進数の 1 を含む増加する数のシーケンスがあります。与えられた n (一連の各数字に設定された 1 ビットの数) を基に、一連の n 番目の数字を見つけるアルゴリズムまたは C プログラムを作成します。

インターネットでこの質問を見つけましたが、答えは (((1 << (n+1)) - 1) & ~2) だと思います。そうじゃない?答えを計算する恐ろしいプログラムを見つけました。

4

4 に答える 4

5

(1 << n+1) - 3結果をより簡潔に表現する方法ですが、そうです、あなたの表現も正しいと思います。

于 2011-01-04T23:45:42.003 に答える
1

はい、それは本当だ。3ビットの場合:

1:  00000111
2:  00001011
3:  00001101 // bit 1 will be 0
4:  00001110

したがって、答えはn + 1ビットであり、ビット1は0です。

于 2011-01-04T23:41:32.290 に答える
0

私はあなたが正しいと信じています。ただし、より簡単な書き方は次のとおりです: ((1 << n) - 1) << 1.

于 2011-01-04T23:34:31.037 に答える
-1

質問は、シーケンスがどこから始まるか、または毎回いくら増加するかを指定していないようですが、あなたの答えは、シーケンスが011111で始まり、101111に移動することを前提としているようです。おそらく0011111000で始まり、次の要素は1111100000である可能性があります。

編集

https://groups.google.com/group/algogeeks/browse_thread/thread/5fda06c0be475c41/で述べられているように、質問のタイトルは「シリーズのn番目の番号」であるため、この投稿のタイトルは「n番目に小さい番号とn 1 "に設定されたビット)は、実際には質問の出所を維持するためのものではありません。

于 2011-01-04T23:41:53.590 に答える