1

私は狂った男のようにグーグルで離れていましたが、私が始めるのに十分具体的なものは何もできません。私の完全な初心者と恐らく悪魔的な速読能力を許してください。

基本的に、私は9つの質問からなる質問票を持っており、それぞれに2つの可能な回答があります。数学(2 ^ 9)を実行した後、512の順列があることがわかりました。

可能な回答の組み合わせのリストを提供するために、繰り返しなしですべての順列のリストを生成しようとしています。

出力を次のようにしたいと思います。

112112111

ここで、1は、質問に対して回答「a」を選択したことを意味し、2は、回答「b」を選択したことを意味します。

どんな助けでもありがたいです、ありがとう。

4

3 に答える 3

4

0から512までの数値を列挙しているだけで、文字列をバイナリ表現で出力し、0と1を1と2に置き換え、適切にパディングして、次のコードが機能するようにします。

    for (int i = 0; i < 512; i++) {
        System.out.println(String.format("%9s", Integer.toBinaryString(i)).replace('1', '2').replace('0', '1').replace(' ', '1'));
    }

Javaでパディングされたバイナリ文字列を生成するためのこの関連する質問を参照してください:Javaで整数の0パディングされたバイナリ表現を取得する方法は?

于 2013-03-27T12:46:23.940 に答える
1

考えられるアプローチの1つは、1と2のみを含む111111111と222222222の間のすべての番号を見つけることです。

何かのようなもの:

for (i=111111111 ; i<=222222222 ; i++)
    if (number_has_only_one_or_twos(i))
         print i
于 2013-03-27T12:42:31.693 に答える
0

私があなたの質問を正しく読んでいるなら、あなたは0から511までの数のバイナリ表現が欲しいだけです(511-0 + 1 = 512のため)。あなたがする必要があるのは、その範囲内の各数値の9ビットのバイナリ表現を見つけることです。0は回答Bを意味し、1は回答Aを意味します。

2進数を文字列に簡単に変換し、0を2に置き換えて、出力することができます。それが数値のバイナリ表現の美しさです。これは、特定の範囲内のすべての順列を見つけるための最良の方法の1つです。

配列のすべての要素の順列を見つけることを想像してみてください。数値の範囲はゼロから配列のサイズまでで、1はそのインデックスを使用することを意味し、0はそのインデックスを使用しないことを意味します。あなたがそれに遭遇するときはいつでもそれはその問題を大いに単純化するでしょう。

于 2013-03-27T12:52:31.000 に答える