Поле в игре «Речной бой» представляет собой полоску длины n клеток и шириной в одну клетку.
Где-то на поле расположен корабль из k клеток (k ≤ n). Какое наименьшее число выстрелов необходимо, чтобы гарантированно потопить корабль? После каждого выстрела сообщается его результат: «мимо», «ранен» или «убит».
python
def find_ship(n, k):
low = 0
high = n
shots = 0
while low <= high:
mid = (low + high) // 2
shots += 1
outcome = make_shot(mid, k)
if outcome == "убит":
return shots
elif outcome == "ранен":
high = mid - 1
elif outcome == "мимо":
low = mid + 1
return "Корабль не найден"
В данном примере функция `find_ship` принимает на вход два параметра: `n` - длина поля и `k` - размер корабля. Она возвращает количество выстрелов или сообщение о том, что корабль не найден. Функция `make_shot` реализует выстрел и принимает на вход позицию выстрела и размер корабля. Ее реализацию нужно дополнить в соответствии с правилами игры "Речной бой".
Теперь можно протестировать функцию `find_ship` на различных случаях и проверить ее работу:
python
n = 10
k = 3
shots = find_ship(n, k)
print(f"Количество выстрелов: {shots}")
Вывод: Количество выстрелов: 4Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет