c++ - 如何检查二维数组是否在 C++ 中按升序排列?

标签 c++ arrays sorting

尽管我已经按升序初始化数组,但我无法让此函数返回 true。

bool won(int gameBoard[][SIZE])
{
    for(int i=0;i<SIZE;i++)
    {
        for(int j=0;j<SIZE;j++)
        {
            if(gameBoard[i][j]>gameBoard[i][j+1]||gameBoard[i][j]>gameBoard[i+1][0])
            {
                return false;
            }
        }
    }
    return true;
}

最佳答案

你的代码有两个问题。

<强>1。 i 和 j 的值在某个阶段超出范围。

<强>2。检查数组是否按升序排列的条件错误。

让我们一一解决

  1. To keep the value of i,j inside the range change the for loop like this

之前:

for(int i=0;i<SIZE;i++)
{
    for(int j=0;j<SIZE;j++)
    {
    }
}

之后:

for(int i=0;i<SIZE-1;i++)
{
    for(int j=0;j<SIZE-1;j++)
    {
    }
}

说明:

您的程序遇到的错误是当 j 的值变为 SIZE-1 时,您正在检查 gameBoard[i][j]>gameBoard[ i][j+1]。但是 gameBoard[i][j+1] 会尝试访问 gameBoard[i][SIZE] 你知道该索引中没有值,因为您将值从 0 保存到 SIZE-1。 当您的程序检查最后一行时,i 也会出现同样的问题。

  1. To fix the checking condition if the array is in ascending order or not change your condition like this:

之前:

if(gameBoard[i][j]>gameBoard[i][j+1]||gameBoard[i][j]>gameBoard[i+1][0])

之后:

if((j!=SIZE-2 && gameBoard[i][j]>gameBoard[i][j+1])
||(j==SIZE-2 && ((gameBoard[i][j]>gameBoard[i][j+1])||(gameBoard[i][j+1]>gameBoard[i+1][0])))

解释:

j的索引小于SIZE-2时比较gameBoard[i][j] & gameBoard[i ][j+1] 看看他们是否打破了条件。但是当 j 的索引等于 SIZE-2 时,我们必须比较两个东西。一个是比较 gameBoard[i][j] 和下一个元素 gameBoard[i][j+1],另一个是比较下一个元素j,下一行第一个元素 gameBoard[i+1][0]。 N:B: 只有那个时候你应该检查 gameBoard[i][j] 是否大于 gameBoard[i+1][0],而不是每次。

关于c++ - 如何检查二维数组是否在 C++ 中按升序排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42047495/

相关文章:

sorting - 使用 LDML 文件中指定的整理顺序进行行排序

sorting - 使用 Julia 将项目插入到排序列表中(有和没有重复)

python - 如何使用 OpenCV 确定对象是浮雕还是凹陷?

c++ - 未找到 ColorBlend

c++ - 当一个函数接受对另一个函数的转发引用时,使用 std::forward 调用该函数有何影响

c - 对于二维动态分配数组的循环错误

arrays - 无法使用类型为 "UInt32"的索引为类型 [String] 的值下标

arrays - VBA 中二维数组中的一个数组元素的具体引用

c# - 在 C# 中对 ListView 进行排序导致崩溃

c++ - 针对 pimpl 的最终用户,pimpl 中的全局和私有(private)前向声明之间的区别