Мне поручено создать задачу, которая находит два из ближайших чисел на входе 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;
}