Матч
15, Числа в ряд (NumbersLine)
В строке записаны числа,
разделенные пробелами. Необходимо в ней найти число, строго большее givenNumber. Если такого числа не существует, то вывести -1.
Класс: NumbersLine
Метод: int getLeast(string line, int givenNumber)
Ограничения:
line содержит от 1 до 50 символов, каждый из
которых является цифрой или пробелом, числа в строке line
лежат в промежутке от 1 до 1000 включительно и не имеют ведущих нулей, line содержит как минимум одно число, 1 £ givenNumber
£ 1000.
Вход. Строка line,
содержащая последовательность чисел, разделенных пробелом, и число givenNumber.
Выход. Число в строке, строго большее givenNumber. Если такого числа не
существует, то вывести -1.
Пример входа
line |
givenNumber |
“1 2 3 4 5” |
2 |
“120 450
780” |
1000 |
“ 45
253 645 400 676 567 ” |
1 |
Пример выхода
3
-1
45
РЕШЕНИЕ
обработка строк + поиск
Занесем все числа в вектор num. Чтение чисел из строки line
организуем при помощи потокового вывода из переменной in типа stringstream. Далее отсортируем массив и при помощи функции
upper_bound найдем число, строго большее givenNumber.
Если такого числа не существует, то выводим -1.
ПРОГРАММА
#include <cstdio>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
using namespace
std;
class NumbersLine
{
public:
int getLeast(string line, int
givenNumber)
{
vector<int> num;
stringstream
in(line);
int a;
while(in >> a) num.push_back(a);
sort(num.begin(),num.end());
a = upper_bound(num.begin(),num.end(),givenNumber)
- num.begin();
if (a >= num.size()) return
-1 ; else return
num[a];
}
};