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

实现Mastermind游戏时的错位棋子计数问题

解决方案

原checkCode函数的核心问题是没有标记已匹配的位置,导致同一个数字会被重复计数(比如秘密代码中的数字被多个猜测数字匹配,或者猜测数字重复匹配秘密代码中的同一数字)。

按照Mastermind规则,正确的统计逻辑需要分两步执行:

  1. 先统计位置完全匹配的数量,同时标记这些已匹配的位置,避免后续重复计算。
  2. 遍历剩余未匹配的猜测数字,在秘密代码的未匹配位置中寻找相同数字,每找到一个就标记对应秘密位置并增加错位计数。

修正后的checkCode函数如下:

void checkCode(int *numbers, int *code){
    int misplacedPieces = 0;
    int correct = 0;
    // 标记已匹配的位置,初始化为0(未使用)
    int used_guess[4] = {0};
    int used_code[4] = {0};

    // 第一步:统计完全匹配的数量
    for (int i = 0; i < 4; i++) 
    {
        if (numbers[i] == code[i]) {
            correct++;
            used_guess[i] = 1;
            used_code[i] = 1;
        }
    }

    // 第二步:统计错位匹配的数量
    for (int i = 0; i < 4; i++) {
        // 跳过已匹配的猜测位置
        if (used_guess[i]) continue;
        for (int j = 0; j < 4; j++) {
            // 跳过已匹配的秘密代码位置,且数字匹配
            if (!used_code[j] && numbers[i] == code[j]) {
                misplacedPieces++;
                used_code[j] = 1; // 标记该秘密位置已被匹配
                break; // 每个猜测数字只匹配一次
            }
        }
    }

    printf("Well placed pieces: %d\nMisplaced pieces: %d\n", correct, misplacedPieces);
}

修正说明

  • 新增used_guess和used_code两个数组,用来记录哪些位置已经被匹配过,防止重复计数。
  • 第一步优先统计完全匹配的情况,同时标记对应位置为已使用,确保这些位置不会参与后续的错位统计。
  • 第二步只处理未匹配的猜测数字,在未被使用的秘密代码位置中寻找匹配,找到后立即标记秘密位置,避免同一秘密数字被多次匹配。

内容的提问来源于stack exchange,提问作者Y.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:35:00