
【答案解析】:
遍历两个数组,统计猜中次数和伪猜中次数
猜中次数:若位置相同且颜色字符也相同在猜中次数计数器+1
伪猜中次数:颜色相同,但是在不同位置,这时候只需要除去猜中位置之外,统计两个数组中各个字符出现的数量,取较小的一方就是每种颜色伪猜中的数量了。
本人代码:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* masterMind(char* solution, char* guess, int* returnSize)
{
int* pa = (int*)malloc(sizeof(int) * 2);
memset(pa, 0, sizeof(int) * 2);
int arr1[26] = { 0 };
int arr2[26] = { 0 };
for (int i = 0; i < 4; i++)
{
if (solution[i] == guess[i]) //位置和颜色都相同
{
pa[0]++;
}
else //颜色相同,各自相加
{
arr1[solution[i] - 'A']++;
arr2[guess[i] - 'A']++;
}
}
for (int i = 0; i < 26; i++)
{
pa[1] += arr1[i] > arr2[i] ? arr2[i] : arr1[i]; //两者取小
}
*returnSize = 2;
return pa;
}
答案代码:
int* masterMind(char* solution, char* guess, int* returnSize){
*returnSize = 2;
static int arr[2] = {0};
arr[0] = 0; arr[1] = 0;//静态空间不会进行二次初始化因此每次重新初始化,可以使用memset函数
int s_arr[26] = {0};//26个字符位 solution 四种颜色数量统计
int g_arr[26] = {0};//26个字符位 guess 四种颜色数量统计
for (int i = 0; i < 4; i++) {
if (solution[i] == guess[i]) {
arr[0] += 1;//位置和颜色完全一致则猜中数量+1
}else {
//统计同一位置不同颜色的两组颜色数量,伪猜中不需要对应位置相同,只需要有对应数量的颜色就行
s_arr[solution[i]-'A'] += 1; //统计solution对应颜色字符出现次数
g_arr[guess[i]-'A'] += 1;//统计guess对应颜色字符出现次数
}
}
//在两个颜色数量统计数组中查看颜色数量,取相同位置较小的一方就是为猜中数量
for (int i = 0; i < 26; i++) {
arr[1] += s_arr[i] > g_arr[i] ? g_arr[i] : s_arr[i];
}
return arr;
}
MasterMind游戏算法解析
本文详细解析了MasterMind游戏的算法实现,通过遍历两个数组统计猜中次数和伪猜中次数,具体包括如何判断位置和颜色是否相同,以及如何统计不同位置相同颜色的情况。
298

被折叠的 条评论
为什么被折叠?



