Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查2D数组在C++中是否处于升序?_C++_Arrays_Sorting - Fatal编程技术网

如何检查2D数组在C++中是否处于升序?

如何检查2D数组在C++中是否处于升序?,c++,arrays,sorting,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]) {

我无法让这个函数返回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;
}

代码中有两个问题

一,。i和j的值在某个阶段超出范围

二,。检查数组是否按升序排列的条件是错误的

让我们逐一解决

要使i,j的值保持在范围内,请像这样更改for循环 之前: 之后: 解释: 当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],而不是每次都检查。

这是一个更安全的版本,它不需要做任何比较,也不需要检查每行开头的索引,所有这些都使用算法函数

#include <algorithm>

// Assuming that the array is 10 x 10
#define SIZE 10 

bool won(int gameBoard[][SIZE])
{
    return std::is_sorted(&gameBoard[0][0], &gameBoard[SIZE-1][SIZE]);
}
因为2D数组是连续的,所以不需要写循环,因为范围从整个2D数组中第一个项目的地址开始,到最后一个项目的地址结束


当i或j处于其最大值时,[j+1]和[i+1]将超出范围。我如何将其保持在范围内?@Jason您的问题解决了吗?如果是,则您应该接受答案,以便将来理解此问题。您确定for循环中的条件吗?我认为您的程序将输出这种类型的输入/1 2 3 4//9 1 3 1/。。。。。。。。。。未排序的值。。。因为您只是检查第一行并返回true。@ash12这不是OP想要的,即确定数组是否按升序排列吗?请再次检查我的注释。我添加了一个数据。。在comment中很难添加input如果数组是真正的2D数组,那么答案基本相同,因为数据是连续的。只是范围必须扩大,不需要for循环。第二个答案更容易理解和实现+从我这里得到1。但是请检查这个并修复第一个程序,因为我认为它是不正确的。
for(int i=0;i<SIZE-1;i++)
{
    for(int j=0;j<SIZE-1;j++)
    {
    }
}
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])))
#include <algorithm>

// Assuming that the array is 10 x 10
#define SIZE 10 

bool won(int gameBoard[][SIZE])
{
    return std::is_sorted(&gameBoard[0][0], &gameBoard[SIZE-1][SIZE]);
}