首页 > 解决方案 > C++ 数组输入不接受一定数量的整数

问题描述

我的任务是创建一个问题,从 10、100 和 1000 个随机整数的输入中找到两个最接近的数字。是的,这是针对学校、数据结构和算法分析的,但即使在我的第二级 c++ 课程中,我也只需要编写“每天”的程序,而不是这些“数学”问题。我已经到了无法再理解发生了什么的地步。

该程序通过询问您要插入多少元素来工作。所以输入“10”。然后输入 10 个随机元素。完成它工作正常。

现在,当我输入 1000 个元素时,它什么也不做。或者如果我增加随机数说任何数字都可以是 1-500,它什么都不做。

是什么导致该程序接受某些输入而不是其他输入?

我真的很感激任何指针、提示或任何东西,我在这门课程中遇到了困难,这是第一周。

#include iostream
#include vector
#include chrono

using namespace std;
using namespace std::chrono;

vector <pair<double, double>> ans;
double *arr = new double [1200000];

int main()
{
    int elements;

    cout << "Enter number of array elements: ";
    cin >> elements;

    cout << "Enter the elements: " << endl;

    for (int i = 0; i < elements; i++)
        cin >> arr[i];

    auto start = high_resolution_clock::now();

    //    Sort the array
    sort(arr, arr + elements);

    int smallest = INT_MAX;

    for (int i = 1; i < elements; i++)
    {
        if ((arr[i] - arr[i - 1]) <= smallest)
        {
            if ((arr[i] - arr[i - 1] ) < smallest)
                ans.clear();

            smallest = arr[i] - arr[i - 1];
            ans.push_back({arr[i - 1], arr[i]});
         }
     }

    auto stop = high_resolution_clock::now();

    cout << "\n\n******* The closest Pair(s) *******" << endl;
    for(int i = 0; i < ans.size(); i++)
    {
        cout << "      \t\t" << ans[i].first << "\t " << ans[i].second << endl;
    }

    auto duration = duration_cast<microseconds>(stop - start);

    cout << "Time taken by the function: "
         << duration.count() << " microseconds" << endl;

    return 0;
}

标签: c++arrayssortingvector

解决方案


1 如果要比较“整数”而不是浮点数(双精度),请使用“大小_t”而不是“双精度”

2 最好像这样定义和使用'arr':
  vector arr;
  ...
  arr.resize(元素);
  ...
  排序(arr.begin(),arr.end());
然后'arr'可以用作'double *'并摆脱手动删除'arr'。


推荐阅读