Задача Z. Угадай число Имя входного файла: стандартный ввод Имя выходного файла: стандартный вывод Ограничение...

Тематика Информатика
Уровень 10 - 11 классы
интерактивная задача угадай число бинарный поиск ограничение времени ограничение памяти взаимодействие с программой стандартный ввод стандартный вывод протокол взаимодействия flush Python Pascal Delphi C++ Java
0

Задача Z. Угадай число Имя входного файла: стандартный ввод Имя выходного файла: стандартный вывод Ограничение по времени: 2 секунды Ограничение по памяти: 256 мегабайт Это интерактивная задача. В процессе тестирования ваша программа будет взаимодействовать с программой жюри с использованием стандартных потоков ввода/вывода. Программа жюри загадала число от 1 до n, цель вашей программы — отгадать его. Для этого ваша программа сообщает свои догадки программе жюри, а программа жюри отвечает, является ли загаданное число большим, меньшим или равным сделанной догадке. Выполнено неравенство 1 ≤ n ≤ 109 . Ваша программа должна сделать не более 30 догадок. Протокол взаимодействия с программой жюри Сначала ваша программа должна прочитать из стандартного потока ввода число n. Затем протокол общения следующий: ваша программа выводит в стандартный поток вывода одну строку, содержащую число — свою догадку о загаданном числе. Делайте сброс буфера потока вывода после каждой догадки. Для этого используйте • flush(output) в паскале или Delphi; • fflush(stdout) или cout.flush() в С/C++; • System.out.flush() в Java. • sys.out.flush() в Python. После этого программа должна считать из стандартного потока ввода одно число: ответ программы жюри. Возможны следующие ответы: • 1 — загаданное число больше последней догадки; • −1 — загаданное число меньше последней догадки; • 0 — последняя догадка верна. Считав 0, ваша программа должна завершиться. Пример стандартный ввод стандартный вывод 5 -1 1 0 3 1 2

avatar
задан 18 дней назад

2 Ответа

0

В данной задаче требуется отгадать загаданное программой жюри число, используя не более 30 попыток. Число находится в диапазоне от 1 до n, где n может быть до 1 миллиарда. Это типичная задача на использование алгоритма бинарного поиска, который позволяет эффективно сузить диапазон возможных значений загаданного числа.

Решение с использованием бинарного поиска

Бинарный поиск — это алгоритм, который ищет целевое значение в отсортированном массиве, последовательно деля массив пополам и определяя, в какой из половин находится целевое значение. Применительно к данной задаче:

  1. Инициализация диапазона поиска:

    • Установите начальные границы поиска: low = 1 и high = n.
  2. Бинарный поиск:

    • Повторяйте следующие шаги до тех пор, пока не будет найдено загаданное число (пока ответ жюри не будет равен 0):
      1. Вычислите среднюю точку: mid = (low + high) // 2.
      2. Выведите mid в стандартный поток вывода и выполните сброс буфера вывода.
      3. Считайте ответ от программы жюри:
        • Если ответ 0, то mid — это загаданное число, завершаем программу.
        • Если ответ 1, это значит, что загаданное число больше mid, обновляем нижнюю границу поиска: low = mid + 1.
        • Если ответ -1, это значит, что загаданное число меньше mid, обновляем верхнюю границу поиска: high = mid - 1.

Пример кода на Python

import sys

def guess_number(n):
    low, high = 1, n
    
    while low 

avatar
ответил 18 дней назад
0

Для решения данной задачи "Угадай число" можно воспользоваться методом бинарного поиска. Сначала задаем диапазон чисел от 1 до n, и далее делаем серединное значение из этого диапазона и отправляем его в качестве догадки программе жюри. В зависимости от ответа программы жюри (больше, меньше или равно), мы сокращаем диапазон поиска до половины и продолжаем процесс. Таким образом, с каждой догадкой диапазон значений будет сужаться, и после нескольких итераций мы сможем угадать число, которое загадала программа жюри. В данной задаче необходимо уложиться в 30 догадок, что вполне реально при использовании метода бинарного поиска.

avatar
ответил 18 дней назад

Ваш ответ

Вопросы по теме