0

所以我有一个数组 board[][] ,它的值不断变化。它是一个维度为 d*d 的方阵。我想检查数组以查看其所有值是否都按升序排列。

for (int i = 0; i < d; i++)
{
    for (int j = 0; i < d; i++)
    {
        if (board[i][j] == (d * i) + j + 1)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

问题是,只要数组 board[0][0] = 1 中的第一个元素,它就会返回 true,并结束我的代码。我不知道如何实现它,以便在数组中的所有元素都按升序从 1 到 (d*d - 1) 之前它不会返回 true。

谢谢!

4

4 回答 4

3

如果我正确理解了您的问题,我认为您想这样做:

int Previous = board[0][0];
for (int i = 0; i < d; i++)
{
    for (int j = 0; j < d; j++)
    {
        if (board[i][j] < Previous)
        {
            return false;
        }

        Previous = board[i][j];
    }
}
return true; // Only at the end do we know that all elements are in ascending order

你所拥有的问题是:

  1. 您将在任一条件下返回,而不是在检查所有值后返回
  2. 您的第二个 for 循环是错误的,并且引用 i,而不是 j
  3. 您的比较是将board值与索引进行比较,而不是其他board
于 2013-10-04T08:38:27.040 回答
2

这应该工作

for (int i = 0; i < d; i++)
{
    for (int j = 0; j < d; j++)
    {
        if (board[i][j] != (d * i) + j + 1)
        {
           return false;
        }
    }
}
return true;
于 2013-10-04T08:38:39.743 回答
1

尝试替换return truecontinue

for (int i = 0; i < d; i++)
{
    for (int j = 0; i < d; i++)
    {
        if (board[i][j] == (d * i) + j + 1)
        {
            continue;
        }
        else
        {
            return false;
        }
    }
}

如果您反转条件,您也可以完全删除 continue 子句:

        if (board[i][j] != (d * i) + j + 1)
        {
            return false;
        }
于 2013-10-04T08:33:07.003 回答
0

1)首先你的意思是升序(垂直,水平还是对角线?) 2)替换你的 if 语句 if ((board[i][j] > board[i][j+1]) || (board[ i][j] > 板[i+1][j]))

于 2013-10-04T08:36:45.087 回答