Поле в игре «Речной бой» представляет собой полоску длины n клеток и шириной в одну клетку.
Где-то на поле расположен корабль из k клеток (k ≤ n). Какое наименьшее число выстрелов необходимо, чтобы гарантированно потопить корабль? После каждого выстрела сообщается его результат: «мимо», «ранен» или «убит».
Входные данные
Первая строка входных данных содержит целое число n (1 ≤ n ≤ 109).
Вторая строка входных данных содержит целое число k (1 ≤ k ≤ n).
Выходные данные
Выведите одно целое число — количество выстрелов.
на языке pascal
pascal
function FindMinimumShots(n, k: Integer): Integer;
var
left, right, mid, shotsNeeded: Integer;
begin
left := 1; // левая граница
right := n; // правая граница
while left <= right do
begin
mid := (left + right) div 2; // середина границ
// вычисляем количество выстрелов, необходимых для покрытия блока
shotsNeeded := (n + mid - 1) div mid;
// проверяем, сколько выстрелов потребуется для текущего блока
if shotsNeeded <= mid then
right := mid - 1 // сокращаем правую границу
else
left := mid + 1; // увеличиваем левую границу
end;
Result := right; // возвращаем минимальное количество выстрелов
end;
var
n, k: Integer;
begin
// считываем входные данные
ReadLn(n);
ReadLn(k);
// вызываем функцию для нахождения минимального количества выстрелов
WriteLn(FindMinimumShots(n, k));
end.
Данный код считывает входные данные - числа n и k, и выводит результат - минимальное количество выстрелов, необходимых для гарантированного потопления корабля. Результат выводится на экран с помощью функции WriteLn.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет