首页 > 解决方案 > 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;
       }
    }
 }

标签: c

解决方案


查看您的代码,需要进行一些观察。首先在你的 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);

只要你所做的事情完成了类似的事情,你就可以了。如果您还有其他问题,请告诉我。


推荐阅读