【问题标题】:Sorting integers in an array. But its not working for some cases对数组中的整数进行排序。但它不适用于某些情况
【发布时间】:2019-07-03 11:32:25
【问题描述】:

所以我写了这个来打印“是的,当代码按升序排列时,”不是“。但如果我一开始就以相等的值开始,程序会打印一个不正确的结果。我不'不明白为什么即使不满足条件,if 语句也会运行。

#include <iostream>

using namespace std;

int main()
{
    int N, i;
    scanf("%d", &N);
    int arr[N];

    for(i = 1; i <= N; i++)
    {
        scanf("%d", &arr[i - 1]);
    }

    for(i = 1; i <= N; i++)
    {

        if(arr[i - 1] > arr[i])
        {
            printf("No");
            return 0;
        }
    }

    printf("Yes");

    return 0;
}

【问题讨论】:

  • arr[i]i == N 的最后一次迭代中访问数组越界。
  • 您的检查循环一直到i &lt;= N 超出范围。
  • fwiw,有std::is_sorted。这是练习吗?
  • 另请注意,非常量大小的数组不在标准 C++ 中,并且不适用于某些编译器。考虑改用std::vector
  • int arr[N]; -- 你的程序不会对任何东西进行排序,因为这在 C++ 中是不允许的。

标签: c++ arrays integer


【解决方案1】:

您有一个错误,您跳过了数组的第一个元素并超过了最后一个元素。如果您的数组有N 元素,它会从array[0] 变为array[N-1]。在此处更改:

for(i = 1; i <= N; i++){

到这里:

for(i = 0; i < N; i++){

您进行检查的第二个for(i = 1; i &lt;= N; i++) 可以从1 开始,因为您在其中查看arr[i - 1],但它应该是i &lt; N 而不是i &lt;= N

此外,int arr[N]; 在 C++ 中不起作用(一些编译器会容忍它,但不是全部)。请改用std::vector&lt;int&gt; arr(N);

【讨论】:

  • 另外,scanf() 可能会失败,但没有错误检查。
猜你喜欢
  • 1970-01-01
  • 2018-05-09
  • 2021-04-07
  • 1970-01-01
  • 2016-09-01
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多