0

我在这个问题上挣扎了很长时间。这是此答案的后续问题(如何将 x 名玩家多次随机分成 2 支球队,每次都不一样?)。

因此,我有 x 名玩家,并且为每个玩家提供1 << n掩码值。通过使用这些面具,我可以轻松地与每支球队的 2 名球员组成一场比赛。现在,如果玩家总数为 5,那么一场可能的比赛可能是这样的:

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 的值进行异或运算

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(在 Java 中,不是 JavaScript,但这不是问题)

于 2012-08-21T00:38:30.807 回答
0

您可以将它们按位或在一起,然后不要让所有休息的玩家。然后,您将不得不一点一点地获得单独的休息球员。

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