Предмет: Информатика,
автор: nicka2213232
С++ GuessException
В этой задаче вам предстоит отгадать число, загаданное жюри.
Жюри загадало число от 1 до 100 включительно.
Требуется отгадать его за неболее чем 30 попыток.
А именно, есть объект типа BlackBox
class BlackBox {
public:
void GuessNumber(int x) const;
};
В этом объекте хранится число. У него есть единственный публичный метод GuessNumber. Этот
объект будет передан вам по константной ссылке.
Пусть жюри загадало число y от 1 до 100. Если вызвать метод GuessNumber у объекта BlackBox с
аргументом x, то может произойти одна из 3 ситуаций:
1. y < x. Тогда будет брошено исключение типа ExceptionLess
2. y == x. Тогда будет брошено исключение типа ExceptionEqual
3. y > x. Тогда будет брошено исключение типа ExceptionGreater
Все исключения будут подключены к вашему коду, а задаются они так:
class ExceptionLess : public std::exception {
};
class ExceptionGreater : public std::exception {
};
class ExceptionEqual : public std::exception {
};
Также к вашему коду будет добавлена реализация самого класса BlackBox, однако его код не
раскрывается.
Ваша задача написать функцию
int guess(const BlackBox& box)
Она принимает объект типа BlackBox, а возвращает загаданное число. У вас есть неболее 30
попыток, чтобы отгадать это число, иначе рещение получит вердикт RE
В систему отправляйте лишь код функции guess и необходимые библиотеки, всё остальное будет
подключено автоматически
Ответы
Автор ответа:
3
Ответ:
int guess(const BlackBox& box) {
int left = 1, right = 100;
int middle;
for (int i = 0; i < 30; ++i) {
middle = (left + right) / 2;
try {
box.GuessNumber(middle);
return middle;
}
catch (ExceptionLess& e) {
right = middle - 1;
}
catch (ExceptionGreater& e) {
left = middle + 1;
}
catch (ExceptionEqual& e) {
return middle;
}
}
throw std::runtime_error("Too many attempts");
}
Объяснение:
Похожие вопросы
Предмет: ОБЖ,
автор: vaniaj7
Предмет: Математика,
автор: zdgzdfhdg
Предмет: Литература,
автор: anastasiausapivska
Предмет: География,
автор: Ijbar
Предмет: Литература,
автор: OWUUQU110OQOWI0WDWDW