同じ数の 2 進数の 1 を含む増加する数のシーケンスがあります。与えられた n (一連の各数字に設定された 1 ビットの数) を基に、一連の n 番目の数字を見つけるアルゴリズムまたは C プログラムを作成します。
インターネットでこの質問を見つけましたが、答えは (((1 << (n+1)) - 1) & ~2) だと思います。そうじゃない?答えを計算する恐ろしいプログラムを見つけました。
(1 << n+1) - 3
結果をより簡潔に表現する方法ですが、そうです、あなたの表現も正しいと思います。
はい、それは本当だ。3ビットの場合:
1: 00000111
2: 00001011
3: 00001101 // bit 1 will be 0
4: 00001110
したがって、答えはn + 1ビットであり、ビット1は0です。
私はあなたが正しいと信じています。ただし、より簡単な書き方は次のとおりです: ((1 << n) - 1) << 1.
質問は、シーケンスがどこから始まるか、または毎回いくら増加するかを指定していないようですが、あなたの答えは、シーケンスが011111で始まり、101111に移動することを前提としているようです。おそらく0011111000で始まり、次の要素は1111100000である可能性があります。
編集
https://groups.google.com/group/algogeeks/browse_thread/thread/5fda06c0be475c41/で述べられているように、質問のタイトルは「シリーズのn番目の番号」であるため、この投稿のタイトルは「n番目に小さい番号とn 1 "に設定されたビット)は、実際には質問の出所を維持するためのものではありません。