Я пытаюсь использовать lower_bound
и upper_bound
функции из algorithm
библиотеки в C++, чтобы найти следующие вещи:Как найти наибольшее значение, меньшее или равное X, и наименьшее значение, большее или равное X?
- наибольшее значение меньше или равно к числу X.
- наименьшее значение, большее или равное к числу X.
Я написал следующий код:
#include <iostream>
#include <algorithm>
int main() {
using namespace std;
int numElems;
cin >> numElems;
int ar[numElems];
for (int i = 0; i < numElems; ++i)
cin >> ar[i];
stable_sort(ar,ar+numElems);
cout << "Input number X to find the largest number samller than or equal to X\n";
int X;
cin >> X;
int *iter = lower_bound(ar,ar+numElems,X);
if (iter == ar+numElems)
cout << "Sorry, no such number exists\n";
else if (*iter != X && iter != ar)
cout << *(iter-1) << endl;
else
cout << *iter << endl;
cout << "Input number X to find the smallest number greater than or equal to X\n";
cin >> X;
int *iter2 = lower_bound(ar,ar+numElems,X);
if (iter2 == ar+numElems)
cout << "Sorry, no such number exists\n";
else
cout << *iter2 << endl;
return 0;
}
Но для некоторых случайных тестовых случаев это дает мне неправильный ответ.
Может ли кто-нибудь найти неправильную часть кода в моей программе?
Просьба указать последовательность ввода с ожидаемым и фактическим результатом, который вы получаете. – Arunmu
Если у вас есть одноэлементный массив, вы получите неправильный результат для «меньше», если «Х» не является этим элементом. (Отладочный совет: начните с небольших, тривиальных тестовых примеров, которые не могут быть ошибочными). – molbdnilo