2016-04-18 7 views
0

私は好き..マトリックス中のすべての可能な0の組み合わせと1を生成する必要があります。 1024X 10マトリックスにおける0の組み合わせと1を生成する方法

0000000000, 0000000001, 0000000010, 0000000011.... etc. 

がそれを行うには良い方法があります以下に示すようにネストされたforループを使用するのではなく?

class Reliability { 
// Trying to create combinations of 0 and 1s 
public static void main(String[] args) { 
// Creating an array of size 1024X10 
    int connectMat[][] = new int[1024][10]; 

    int count1 = 0; 
// Intitially all rows are set to zero 
    for (int r1 = 0; r1 <= 1; r1++) { 
// fill all rows with 0 and the 1 
     for (int r2 = 0; r2 <= 1; r2++) { 
      for (int r3 = 0; r3 <= 1; r3++) { 
       for (int r4 = 0; r4 <= 1; r4++) { 
             // Updating the elements of each row 
              connectMat[count1][0] = r1; 
              connectMat[count1][1] = r2; 
              connectMat[count1][2] = r3; 
              connectMat[count1][3] = r4; 

          // Incrementing count to point to the next row 
              count1++; 
             } 
            } 
           } 
          } 
+0

"コンビネーション"とは何でしょうか? – Mordechai

+0

組み合わせを「見つけよ」または「生成する」必要がありますか? - 「組み合わせ」という言葉の意味は何ですか? – Mordechai

+0

私は組み合わせを生成する必要があります – Connors

答えて

1

この問題は、各行番号のバイナリ表現を調べることに直接変換されます。ビット操作を使用して必要な値を引き出すことができます。

final int BITS = 10; 

int[][] connectMat = new int[1 << BITS][BITS]; 

for (int i = 0; i < (1 << BITS); ++i) { 
    for (int j = 0; j < BITS; ++j) { 
     connectMat[i][j] = (i >> (BITS-1 - j)) & 1; 
    } 
} 

1 << BITSを説明に等しいことに注意してください、または1024。

(i >> (BITS-1 - j)) & 1を理解するために、いくつかの値の例を見てみましょう。バイナリでi == 673、または1010100001としましょう。そして、j == 2は、左から3番目のビットを意味するとします。すべての変数の交換、我々は持っている:

connectMat[673][2] = (673 >> (10-1 - 2)) & 1; 

シフトが673 >> 10-1 - 2、または673 >> 7です。右の7桁に1010100001を移動すると、右端の7桁が切り捨てられ、101 0100001 となります。私たちが望んでいたビットが右端のビットであることを見てください。最後の& 1は右端のビットを抽出するので、最終結果として1が得られます。割り当ては次のようになります。

connectMat[673][2] = 1; 
関連する問題