c - C中的策划游戏(带文字)
问题描述
我可能不会在这里得到帮助,因为我的问题远非具体(我什至不知道它到底有什么问题)但是,根据我教授的测试,它有问题(在正确性方面是错误的- 它没有提供正确数量的直接和间接匹配)(我无法访问他的测试)。据我一直在测试,它通过了我所有的测试。但是,有超过几亿种可能的结果(我认为),我无法全部测试,因为我不知道如何进行自动化测试......
这是我的代码,它执行名为 mastermind 的游戏的“逻辑”部分,它将随机生成的字母字符串(最多 8 个)与用户输入字符串(猜测)进行比较。我想看看过去是否有人遇到过这个游戏,并且知道它应该如何比较两个字符串并生成正确数量的准确和不准确猜测的逻辑。
// userInput->position - a length of a string(max 8)
// userInput->code - randomly generated code
// userInput->arr - user input string
void checkForExactMatch(Data* userInput) {
int i;
for (i = 0; i < userInput->position; i++) {
if (userInput->code[i] == userInput->arr[i]) {
userInput->exactMatch++;
userInput->arr[i] = 'a';
}
else
checkForInExactMatch(userInput, i);
}
}
void checkForInExactMatch(Data* userInput, int i) {
int j;
for (j = 0; j < userInput->position; j++) {
if (userInput->arr[j] == userInput->code[i]) {
userInput->arr[j] = 'a';
userInput->inExactMatch++;
break;
}
}
}
解决方案
查看您的代码,需要进行一些观察。首先在你的 forcheckForExactMatch()
调用中checkForInExactMatch
是在你的for
循环中。因此,在您调用的第一个不匹配checkForInExactMatch
以及从返回时checkForInExactMatch
——您在下一次迭代中再次调用它,除非您的第一个不匹配恰好在最后一个字符上。
为了解决这个问题,您应该完全确定您是否有完全匹配,在调用for
之前完成循环。checkForInExactMatch
在您的checkForInExactMatch
中,您必须确定单个公共字符或某个最小长度子字符串是否构成不精确匹配。
听起来您已经解决了问题,并且很好地推动了解决方案。根据您的处理方式,保留一个简单的标志,checkForExactMatch()
然后int matched = 1;
循环转动您的测试
for (i = 0; i < userInput->position; i++)
if (userInput->code[i] != userInput->arr[i]) {
matched = 0;
break;
}
那么这只是一个简单的测试
if (matched) {
userInput->exactMatch++;
userInput->arr[i] = 'a';
}
else
checkForInExactMatch(userInput, i);
只要你所做的事情完成了类似的事情,你就可以了。如果您还有其他问题,请告诉我。
推荐阅读
- python - pandas 在 value_counts() 中为不存在的类别填写 0
- javascript - 自定义加载器不适用于 react-table
- sql - VERTICA:如何创建循环
- reactjs - React Redux:更新对象正在更新状态但未触发选择器
- x86 - 适用于 x32 和 x64 文件的 VS 安装程序
- javascript - 将 JSON 从 quill 导出到数据库
- android - 带有 ID 的房间查询返回 null
- c# - C# 如何检查下载的 zip 存档是否损坏(“找不到中央目录记录结束”异常)
- html - 如何在图片标签内使用 Base64 SVG 占位符
- flutter - Flutter:使用手势检测器禁用多点触控/拖动