如何在C ++中同时比较多个变量?

时间:2019-04-14 18:04:30

标签: c++

我正在制作Sudoku验证程序,该程序检查已解决的数独是否正确,在该程序中,我需要将多个变量进行比较以检查它们是否相等...

无论每个su [] []是否都具有不同的值,我都提供了我尝试过的代码片段。我没有得到预期的结果...

我想确保su [] []中的所有值都不相等。

我该如何实现相同的代码段中的错误?

谢谢...

for(int i=0 ; i<9 ;++i){ //for checking a entire row

if(!(su[i][0]!=su[i][1]!=su[i][2]!=su[i][3]!=su[i][4]!=su[i][5]!=su[i][6]!=su[i][7]!=su[i][8])){

system("cls");

cout<<"SUDOKU'S SOLUTION IS INCORRECT!!";

exit(0);

} }

1 个答案:

答案 0 :(得分:0)

要检查每个列的唯一性,您必须将每个元素与列中的其他元素进行比较。

例如:

for (int i = 0; i < 9; ++i) {
    for (int j = 0; j < 9; ++j) {
        for (int k = j + 1; k < 9; ++k) {
            if (su[i][j] == su[i][k]) {
                system("cls");
                cout << "SUDOKU'S SOLUTION IS INCORRECT!!\n";
                exit(0);
            }
        }
    }
}

由于每行只有8个元素,因此三次解决方案不会给您带来太多开销。

如果元素数较多,则可以初始化大小为N的数组(其值为0)并横穿该列。对于列中的第i个元素,请向该元素在数组中的位置添加1。然后横向排列。如果某个位置的值不同于1,则表示该列中的值重复。

例如:

for (int i = 0; i < N; ++i) {
    int arr[N] = {0};

    for (int j = 0; j < N; ++j)
        ++arr[su[i][j] - 1];

    for (int i = 0; i < N; ++i) {
        if (arr[i] != 1) {
            system("cls");
            cout << "SUDOKU'S SOLUTION IS INCORRECT!!\n";
            exit(0);
        }
    }
}

对于高N值,此方法比第一种方法快得多。

上面的代码检查每一列的唯一性,您仍然需要检查每一行。

PS:我还没有测试代码,它可能有错误,但是希望您能理解。