【问题标题】:How do I check to see if my array is in ascending order?如何检查我的数组是否按升序排列?
【发布时间】:2013-10-11 04:17:27
【问题描述】:

所以我有一个数组 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。

谢谢!

【问题讨论】:

  • 第二个for 循环中的界限似乎完全错误。 SO 不是一个用于代码审查的网站,即使它是,你也应该对其进行最少的调试。
  • 首先,第二个循环应该检查并增加j,而不是i。然后,只要项目的顺序正确,就不能从循环中中断 (return true),而是继续到板的末尾,并从循环后继续 return true

标签: c arrays sorting multidimensional-array shuffle


【解决方案1】:

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

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

【讨论】:

  • 看来所有元素都应该正好是从1到(d*d)-1。
【解决方案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;

【讨论】:

    【解决方案3】:

    尝试将return true 替换为continue

    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;
            }
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        • 2021-03-27
        • 2019-08-14
        • 2018-04-25
        • 1970-01-01
        • 2021-12-30
        相关资源
        最近更新 更多