【问题标题】:Using a for loop to check order of numbers, decreasing and increasing order使用 for 循环检查数字的顺序,减少和增加顺序
【发布时间】:2019-06-28 22:21:48
【问题描述】:

用户将输入五个值(范围 2-9)到一个数组中。然后代码应该检查输入的五个值是按递减顺序还是递增顺序。

例子:

2, 3, 4, 5, 6 - 将导致布尔值设置为“真”

6, 5, 4, 3, 2 - 与上面的结果相同

但是,如果有两个相同的数字或序列不按顺序增加或减少,则布尔值为'false'

例子:

2、3、2、5、6 - 假

2、3、5、4、6 - 假

7、8、6、5、4 - 假

我分别完成了两个案例,当有一对时,当检查递增顺序时。

我已经设置了 For 循环来检查增加的订单/对

for(int count = 0; count < 5; count++){
    if((cards[count] > cards[count + 1]) || (cards[count] == cards[count + 1]))
        result = false;
    else
        continue;
}

我为检查降序而创建的循环

for(int count = 0; count < 5; count++){
    if((cards[count] < cards[count+ 1]) || (cards[count] == cards[count + 1]))
        result = false;
    else
        continue;
}

用于检查递增顺序的 for 循环不起作用,最后将它们放在一起。为了更容易,我尝试将其分解为单独的部分。

编辑:

根据分配指南,我无法对数组或任何修改它的东西进行排序。也不允许创建副本并使用它。

【问题讨论】:

  • 条件可以压缩为if(cards[count] &gt;= cards[count+1]),另一个类似

标签: c++ arrays for-loop


【解决方案1】:

首先,您不需要else continue; - 这会自动发生。

其次,您在正确的轨道上,但是您的数组访问出现错误。您的循环从 0 变为 4(当它达到 5 时,它将结束循环)。当您查看数组的第 4 项(数组中的第 5 项)并将其与第 5 项(数组中的第 6 项)进行比较时,您正在与不存在的值进行比较。这可能会导致未定义的行为。

解决方案是将循环中的条件设置为&lt; 4,以便在最后一个循环中将倒数第二项与最后一项进行比较。

【讨论】:

    【解决方案2】:

    您可以在一个循环中检查单调性。

    bool isArrayMonotonic(std::vector<int>& arr) {
        if (arr.empty()) {
            return true;
        }
        bool isAscending = true, isDescending = true;
        int pre = arr[0];
        for (int i = 1; i < arr.size(); ++i) {
            isAscending = isAscending && arr[i] > pre;
            isDescending = isDescending && arr[i] < pre;
            pre = arr[i];
        }
        return isAscending || isDescending;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多