0

私はこの問題にかなり長い間苦労してきました。これは、この回答に対するフォローアップの質問です ( x 人のプレイヤーを 2 つのチームにランダムに複数回、毎回異なる方法で分割する方法は? )。

したがって、x 人のプレイヤーがいて、それぞれに1 << nマスク値を指定します。それらのマスクを使用することで、各チームに 2 人のプレイヤーと簡単に試合を組むことができます。ここで、プレイヤーの総数が 5 人の場合、考えられる対戦の 1 つは次のようになります。

01100 team a
00011 team b
------------
10000 player resting

または、6 人のプレイヤーの場合、次のようになります。

100010 team a
001001 team b
-------------
000100 player resting
010000 player resting

質問
チーム a とチーム b のマスクを比較して、休んでいる選手を取得するにはどうすればよいですか? (私は完全なビット単位の初心者なので、コード例は高く評価されています)

ありがとう

4

2 に答える 2

1

チーム A と B の値に対してXORを実行します。

var resting = a ^ b;

次に、休憩中のプレーヤーは でマークされます0。つまり、次のようになります。

100010 team a
001001 team b
-------------
101011 players resting

最後に、結果の各ビットを反復処理します。

var totalPlayers = 6;

for (var i = 1; i <= totalPlayers; i++) {

   if ((resting & 1) === 0) {
       console.log("Player #" + i + " is resting.");
   }

   resting >>>= 1;
}

実際の例は次のとおりです: http://ideone.com/Kb3XJ (JavaScript ではなく Java ですが、それは問題ではありません)

于 2012-08-21T00:38:30.807 に答える
0

それらをビット単位で OR してから NOT して、すべての休止中のプレーヤーを取得することができます。次に、別の休憩中のプレーヤーを取得するために少しずつ移動する必要があります。

100010 
001001
------OR
101011 #all players playing
------NOT
010100 #all players not playing
于 2012-08-21T00:31:28.583 に答える