【问题标题】:Analysing two arrays for mastermind game分析主谋游戏的两个数组
【发布时间】:2021-12-28 18:36:52
【问题描述】:

我的主要默认设置是分析逻辑。有什么要求。 分析函数中的处理算法是练习的主要兴趣。

我需要比较名为essai[]ref[] 的玩家提议。 ref[] 是由 random 函数生成的 4 位数字。 一个数字被算作“正好在正确的地方”,不能算作“正确的数字在错误的地方”。 示例:ref[] = {1, 2, 3, 4}essai[] = {1, 5, 7, 3}。它将在“完全正确的地方”计为 1 个数字,在“错误的地方”计为 0 个数字。不能超过一次。其他方式也一样。 我从正确的地方开始,如果有的话,我将essai[]ref[] 中的两个数字都替换为-1。我对“正确的数字在错误的地方”做了同样的事情。

到目前为止,这是我的代码:

void analyse(int ref[], int essai[]) {
int i, j, o, RefTmp[4], NbPos, NbChif;

for(i = 0; i < 4; i++){
  RefTmp[i] = ref[i];
}

for (j = 0; j < 4; j++) { // [1] = 5 : [1] = 2
    for (o = 0; o < 4; o++) {
        if (RefTmp[j] == essai[o]) {
            if (j == o) {
                ++NbPos;
                RefTmp[j] = essai[o] = -1;
                printf("One number in the right place\n");
                break;
            }
            else {
                ++NbChif;
                RefTmp[j] = essai[o] = -1;
                printf("One number in the wrong place\n");
                break;
            }
        }
    }
}
}

我的理解是我需要创建 2 个for 循环来比较两个数组,但是当有多个“正确的数字错误”时(例如),循环也会打印多次。它只能打印一次。 我做了一个RefTmp[],这样真正的ref[]就不会在这个过程中被破坏。

【问题讨论】:

    标签: c compare array-comparison


    【解决方案1】:

    在考虑处理“正确数量错误位置”实例之前,您应该找到并“擦除”所有“正确数量正确位置”实例(只需要一个循环)。

    【讨论】:

    • 你的意思是我只使用一个循环,如果有相同的数字我用NULL替换它?像 RefTmp[1] = essai[1] = NULL?对不起这个问题,我只有 1 个月的 C 语言 ^^'
    • 分配-1不是为了“擦除”实际值吗?
    • 好吧,如果我想一想,我猜。但是当我用 -1 替换或删除该数字时,循环将看到两个数组之间的相等非? :|
    • 那你之前为什么要这么做?如果您为每个数组使用不同的值“擦除”,那会解决问题吗?
    • 之所以这样做,是因为练习告诉我这样做的。 ^^ 我可能需要重新考虑这个过程。谢谢帮助^^'
    猜你喜欢
    • 1970-01-01
    • 2023-02-05
    • 2015-08-13
    • 2010-11-14
    • 1970-01-01
    • 2010-11-10
    • 2015-02-03
    • 2023-03-27
    • 2011-08-15
    相关资源
    最近更新 更多