Ввод массива C ++ не принимает определенное количество целых чисел - PullRequest
0 голосов
/ 16 января 2020

Мне поручено создать задачу, которая находит два из ближайших чисел на входе 10, 100 и 1000 случайных целых чисел. Да, это для школы, структуры данных и анализа алгоритмов, но даже в моем курсе c ++ второго уровня мне просто нужно было писать программы «каждый день», а не эти «математические» вопросы. Я дошел до того, что уже не могу понять, что происходит.

Программа работает, спрашивая, сколько элементов вы хотите вставить. Поэтому введите «10». Затем введите 10 случайных элементов. Готово, работает нормально.

Теперь, когда я go ввожу 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;
}

1 Ответ

0 голосов
/ 16 января 2020

1 Если вы хотите сравнить «целые числа» вместо float (double), тогда используйте «size_t» вместо «double»

2 Лучше определить и использовать 'arr' следующим образом: вектор обр; ... arr.resize (элементы); ... сортировать (arr.begin (), arr.end ()); тогда «arr» можно использовать как «двойной *» и избавиться от удаления «arr» руками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...