如何用单if-else语句实现猜数字游戏的红/白Pin判定逻辑?
用单个if-else实现Mastermind的红/白针计算
嘿,这个问题挺有意思的——用单个if-else来实现Mastermind类游戏的针数计算对吧?其实核心是把红针和白针的计算逻辑都塞进这个if-else的主分支里(else分支可以空着,只要满足“单个if-else”的要求就行)。
先理清楚必须遵循的逻辑步骤:
- 红针(Red Pin):对应位置的随机数与玩家猜测数完全匹配,每匹配1次计数+1。
- 白针(White Pin):玩家猜测的数字存在于随机数序列中,但位置不匹配;注意要排除已经被红针匹配的数字(避免重复计数)。
代码实现(以JavaScript为例)
// 示例输入 const randomNumbers = [1, 3, 2, 4]; const playerGuesses = [2, 3, 1, 4]; let redPins = 0; let whitePins = 0; // 仅有的单个if-else语句 if (true) { // 第一步:计算红针数量 for (let i = 0; i < 4; i++) { if (randomNumbers[i] === playerGuesses[i]) { redPins++; } } // 第二步:统计随机数中未匹配红针的数字出现次数 const randomNumCounts = {}; for (let i = 0; i < 4; i++) { if (randomNumbers[i] !== playerGuesses[i]) { randomNumCounts[randomNumbers[i]] = (randomNumCounts[randomNumbers[i]] || 0) + 1; } } // 第三步:计算白针数量(排除红针位置,统计数字重叠次数) for (let i = 0; i < 4; i++) { const guess = playerGuesses[i]; if (randomNumbers[i] !== guess && randomNumCounts[guess] > 0) { whitePins++; randomNumCounts[guess]--; // 避免重复计数 } } } else { // 此分支永远不会执行,仅为满足单个if-else的语法要求 } console.log(`Red Pins: ${redPins}, White Pins: ${whitePins}`);
关键逻辑解释
- 我们用
if (true)确保进入主执行分支,else分支留空,严格符合“仅使用单个if-else语句”的要求。 - 红针的计算逻辑直观:遍历每个位置,直接比对数值是否相等。
- 白针的计算需要额外处理:
- 先过滤掉已经匹配红针的数字(这些数字已经是精准匹配,不能再计入位置错误的匹配)。
- 统计剩余随机数的数字出现次数,再遍历玩家猜测的数字(同样排除红针位置),每找到一个存在于剩余随机数中的数字,就给白针计数+1,并减少对应数字的统计次数(防止重复计算同一数字)。
如果是Java、C#等其他语言,核心逻辑完全一致,只需要调整语法细节(比如用HashMap替代对象来统计数字次数)。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

