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

Jas*_*son 0 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;
}
Run Code Online (Sandbox Code Playgroud)

Fah*_*hik 5

您的代码中有两个问题.

1. i和j的值在某个阶段变得超出范围.

2.检查数组是否按升序排列的条件是错误的.

让我们一一解决

  1. 为了保持i的值,j在范围内改变for循环,就像这样

之前:

for(int i=0;i<SIZE;i++)
{
    for(int j=0;j<SIZE;j++)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

后:

for(int i=0;i<SIZE-1;i++)
{
    for(int j=0;j<SIZE-1;j++)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

说明:

当值你的计划正面临着错的是j成为SIZE-1你检查是否gameBoard[i][j]>gameBoard[i][j+1].但gameBoard[i][j+1]将尝试访问gameBoard[i][SIZE],你知道有在指数没有价值,因为你从0保存价值SIZE-1.i当您的程序检查最后一行时会发生同样的问题.

  1. 要修复检查条件,请if the array is in ascending order or not更改以下条件:

之前:

if(gameBoard[i][j]>gameBoard[i][j+1]||gameBoard[i][j]>gameBoard[i+1][0])
Run Code Online (Sandbox Code Playgroud)

后:

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])))
Run Code Online (Sandbox Code Playgroud)

阐释:

当指数j小于SIZE-2比较gameBoard[i][j]gameBoard[i][j+1],看看他们是否断条件或not.But当索引j等于SIZE-2,我们要比较两个things.One的比较gameBoard[i][j]下一个元素gameBoard[i][j+1],另外一个是比较下一个元素的j与下一行的第一元件gameBoard[i+1][0].N:B:只有那个时候你应该检查是否gameBoard[i][j]大于gameBoard[i+1][0],而不是每次.