解决珠玑妙算游戏问题:C 语言实现

server/2025/2/13 7:18:04/

 

一、引言

 

珠玑妙算游戏(the game of master mind)是一个有趣的逻辑推理游戏。在编程领域,我们可以通过编写代码来模拟游戏中计算猜中与伪猜中次数的过程。本文将详细介绍如何使用 C 语言实现这一功能,并对核心代码进行解析。

二、游戏规则回顾

在珠玑妙算游戏中,计算机有 4 个槽,每个槽放一个球,颜色可能是红色(R)、黄色(Y)、绿色(G)或蓝色(B)。玩家需要猜测颜色组合。如果猜对某个槽的颜色和位置,算一次“猜中”;如果只猜对颜色但槽位猜错了,则算一次“伪猜中”。

 

三、代码实现

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

int* masterMind(char* solution, char* guess, int* returnSize) {

    int *arr = (int *)malloc(2 * sizeof(int));

    arr[0] = 0; // 猜中次数

    arr[1] = 0; // 伪猜中次数

    int countS[4] = {0}; // 用于记录solution中每种颜色的数量

    int countG[4] = {0}; // 用于记录guess中每种颜色的数量

 

    for (int i = 0; i < 4; i++) {

        if (solution[i] == guess[i]) {

            arr[0]++;

        } else {

            switch (solution[i]) {

                case 'R': countS[0]++; break;

                case 'G': countS[1]++; break;

                case 'B': countS[2]++; break;

                case 'Y': countS[3]++; break;

            }

            switch (guess[i]) {

                case 'R': countG[0]++; break;

                case 'G': countG[1]++; break;

                case 'B': countG[2]++; break;

                case 'Y': countG[3]++; break;

            }

        }

    }

 

    arr[1] = (countS[0] < countG[0]? countS[0] : countG[0]) +

             (countS[1] < countG[1]? countS[1] : countG[1]) +

             (countS[2] < countG[2]? countS[2] : countG[2]) +

             (countS[3] < countG[3]? countS[3] : countG[3]);

 

    *returnSize = 2;

    return arr;

}

四、代码解析

内存分配与初始化:

使用  malloc  函数为存储结果的数组  arr  分配内存,用于存放猜中次数( arr[0] )和伪猜中次数( arr[1] ),并初始化为 0。同时创建两个长度为 4 的数组  countS  和  countG ,分别用于记录  solution  和  guess  中每种颜色(红、绿、蓝、黄)的数量,也初始化为 0。

遍历与计数:

通过一个  for  循环遍历 4 个槽位。如果  solution  和  guess  在当前位置的颜色相同,说明猜中, arr[0]  自增 1。如果颜色不同,则分别通过  switch  语句统计  solution  和  guess  中对应颜色的数量。

计算伪猜中次数:

伪猜中次数通过比较  countS  和  countG  数组中对应颜色的数量,取较小值并累加得到。这是因为伪猜中次数取决于两种颜色组合中较少出现的那种颜色的数量。

 

设置返回值相关信息:

设置  *returnSize  为 2,表示返回数组的大小为 2,最后返回存储结果的数组  arr 。

 

五、总结

通过上述 C 语言代码,我们成功实现了在珠玑妙算游戏中计算猜中与伪猜中次数的功能。代码逻辑清晰,通过合理的内存管理和计数方式解决了游戏中的关键问题。希望本文对理解和解决类似的编程问题有所帮助。


http://www.ppmy.cn/server/167271.html

相关文章

eclipse配置Spring

1、从eclipse下载Spring工具 进入 help – install new software… &#xff0c;如下图&#xff1a; 点击 add &#xff0c;按以下方式输入&#xff1a; Name : Spring Location : http://dist.springsource.com/release/TOOLS/update/e4.10/ 之后点击 add &#xff0c;等待…

AH比价格策略源代码

用python 获取在A股和香港上市的公司和在A股和香港上市的公司股票代码和名称并且选出港股和A股涨幅相差比较大的股票 import akshare as akdef get_ah_stocks():# 获取A股股票列表a_stock_list ak.stock_zh_a_spot_em()print(a_stock_list)a_stock_list a_stock_list[[&quo…

Java 魔法:精准掌控 PDF 合同模板,指定页码与关键字替换签章日期

朋友们&#xff01;在实际业务场景中&#xff0c;经常会碰到处理 PDF 合同模板的需求&#xff0c;要在几十页的合同里对指定页面替换公章、签名和日期&#xff0c;还涉及多人签名以及多个公司盖公章。下面就给大家分享两种用 Java 处理这类问题的方法&#xff0c;一种是通过指定…

Python——批量图片转PDF(GUI版本)

目录 专栏导读1、背景介绍2、库的安装3、核心代码4、完整代码总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自动化专…

MybatisPlus常用增删改查

记录下MybatisPlus的简单的增删改查 接口概述 Service和Mapper区别 Mapper简化了单表的sql操作步骤&#xff08;CRUD&#xff09;&#xff0c;而Serivce则是对Mapper的功能增强。 Service虽然加入了数据库的操作&#xff0c;但还是以业务功能为主&#xff0c;而更加复杂的SQL…

《Coresight/Trace/Debug大合集》64节课16小时,6大主题, 685页PPT

CSDN学院课程连接&#xff1a;https://edu.csdn.net/course/detail/39573 虽然说当前已经完结了&#xff0c;但后续可能会持续更新。

【Day38 LeetCode】动态规划DP 子序列问题Ⅱ

一、动态规划DP 子序列问题Ⅱ 1、最长公共子序列 1143 确定dp数组含义&#xff0c;dp[i][j]表示长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列的长度。 dp转移关系&#xff0c;对于当前值dp[i][j], 分为text1[i - 1] 与 text2[j - 1]相同与…

PhotoShop中创建窗口使用对应按钮创建对应图层简单示例

以前在使用Photoshop的PSD文件转换成Unity的UI Prefab工具的时候&#xff0c;想过是否能在PhotoShop中创建“组件”方式创建层&#xff0c;然后通过代码给层做重命名&#xff0c;不需要手动改写层的名字&#xff0c;可以直接创建所需数量的图层并按照层级排列&#xff0c;具体思…