You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单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. 先过滤掉已经匹配红针的数字(这些数字已经是精准匹配,不能再计入位置错误的匹配)。
    2. 统计剩余随机数的数字出现次数,再遍历玩家猜测的数字(同样排除红针位置),每找到一个存在于剩余随机数中的数字,就给白针计数+1,并减少对应数字的统计次数(防止重复计算同一数字)。

如果是Java、C#等其他语言,核心逻辑完全一致,只需要调整语法细节(比如用HashMap替代对象来统计数字次数)。

内容的提问来源于stack exchange,提问作者Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:59:58