首页 > 解决方案 > 如何在 3x3 网格中的空白处输入 2 或 4?

问题描述

void putTile(int &n1, int &n2, int &n3, int &n4, int &n5, int &n6, int &n7, int &n8, int &n9)
{
    srand(time(0));
    int i = (((rand()%10)) < 5 ? 2:4);

    if (n1||n2||n3||n4||n5||n6||n7||n8||n9 == 0) {
        switch((rand()%9) + 1) {
        case 1:
            n1 = i;
            break;
        case 2:
            n2 = i;
            break;
        case 3:
            n3 = i;
            break;
        case 4:
            n4 = i;
            break;
        case 5:
            n5 = i;
            break;
        case 6:
            n6 = i;
            break;
        case 7:
            n7 = i;
            break;
        case 8:
            n8 = i;
            break;
        case 9:
            n9 = i;
            break;
        }
    }
}

我试图在空的地方(包含 0 的地方)随机生成 2 或 4,但我的算法在随机地方输入随机生成的数字(2 或 4),即使在已经有数字的地方,因为我使用了 if 语句代码的开头。有关如何更正代码的任何建议?

标签: c++eclipse

解决方案


让我们像编译器一样查看您的代码:

void putTile(int &n1, int &n2, int &n3, int &n4, int &n5, int &n6, int &n7, int &n8, int &n9)
{
    srand(time(0));
    int i = (((rand()%10)) < 5 ? 2:4);

    // below compiler sees "number or number or number or (number is zero)",
    // compiler does not see "if either of the numbers is zero",
    // if asked to do a logical "OR" of two numbers, then  it will do the logical
    // "number is non-zero OR other number is non-zero",
    // i.e. it sees this, probably extremely probable condition:
    if (   (n1 != 0)
         ||(n2 != 0)
         ||(n3 != 0)
         ||(n4 != 0)
         ||(n5 != 0)
         ||(n6 != 0)
         ||(n7 != 0)
         ||(n8 != 0)
         ||(n9 == 0)
       )
    {
        // program will almost always execute this
        switch((rand()%9) + 1) // do a switch on a random number
        {
        case 1: // if it is 1
            n1 = i; // overwrite n1 unconditionally with i, whether it is 0 or not
            break;
        case 2:     // same for 2 ... etc.
            n2 = i;
            break;
        case 3:
            n3 = i;
            break;
        case 4:
            n4 = i;
            break;
        case 5:
            n5 = i;
            break;
        case 6:
            n6 = i;
            break;
        case 7:
            n7 = i;
            break;
        case 8:
            n8 = i;
            break;
        case 9:
            n9 = i;
            break;
        }
    }
}

推荐阅读