Как написать программу которая угадывает число
Перейти к содержимому

Как написать программу которая угадывает число

Угадай число: 1-строчный алгоритм изучения c# & qbasic

1-я строка имя файла
комментарии смещены вправо отдельно от строк ниже
фигурная скобка открывающаяся: в начале строки
фигурная скобка закрывающиеся: подряд несколько
спец форматирование вывода на экран не использую
однотипные команды: несколько в 1-й строке как qbasic
многие мои программы проверяемые онлайн
многие мои программы данные импортируют и экспортируют

Многие мои программы применяют строки программы
Русская Сортировка Половинами обучающей программированию

1 18122453 320244676 less
2 18122453 160122338 less
3 18122453 80061169 less
4 18122453 40030584 less
5 18122453 20015292 less
6 18122453 10007646 MORE
7 18122453 15011469 MORE
8 18122453 17513380 MORE
9 18122453 18764336 less
10 18122453 18138858 less
11 18122453 17826119 MORE
12 18122453 17982488 MORE
13 18122453 18060673 MORE
14 18122453 18099765 MORE
15 18122453 18119311 MORE
16 18122453 18129084 less
17 18122453 18124197 less
18 18122453 18121754 MORE
19 18122453 18122975 less
20 18122453 18122364 MORE
21 18122453 18122669 less
22 18122453 18122516 less
23 18122453 18122440 MORE
24 18122453 18122478 less
25 18122453 18122459 less
26 18122453 18122449 MORE

27 18122453 18122454 less
28 18122453 18122451 MORE
29 18122453 18122452 MORE
30 18122453 18122453 win by 30 steps

Программа "Угадай число"

Отгадать целое число, которое «загадал» компьютер в определенном диапазоне.

Решение

  • a – число, «загаданное» компьютером;
  • b – очередное число, вводимое пользователем.

Алгоритм решения задачи:

Программа генерирует псевдослучайное число, которое записывается в переменную a .

Пока число a не совпадет с числом b , пользователю будет предлагаться ввести очередное число. При этом, если b > a , то на экран будет выдаваться сообщение «Много». Иначе будет проверяться условие b < a . При его положительном значении появится сообщение «Мало», иначе сообщение «Угадал».

Не трудно понять, что если b не больше и не меньше a , то значит оно равно a . В таком случае логическое выражение при while вернет false, и цикл прервется.

Программа на языке Паскаль:

Примечание. Угадать число всегда можно не более чем через 6-7 попыток, если делить каждый оставшийся диапазон пополам.

Угадать число от 0 до 100 за 7 попыток — математический трюк

Этот математический фокус не так сложен, как может показаться на первый взгляд. Более того, решение мы реализуем программно на языке Java. Приступим?

Условие

Если расписать весь процесс поэтапно, выглядит это следующим образом:

  1. Вы загадываете число от 0 до 100.
  2. Программа выводит целое число в рамках данного диапазона.
  3. Вы отвечаете, ваше число больше, меньше или равно тому, что вывела программа.
  4. Если число больше либо меньше, программа продолжает предлагать варианты.
  5. За 7 или менее попыток число гарантированно угадывается.

Решение

На самом деле, никакого особого секрета здесь нет, и решение строится на бинарном поиске. Это простая алгоритмическая задача, смысл которой в том, чтобы каждый раз делить оставшийся диапазон на 2. Таким образом мы с каждой попыткой вдвое сокращаем область поиска, увеличивая шансы на успех. Вот и весь математический фокус.

Допустим, первой догадкой алгоритма будет число 50, после чего становится понятно, в какую сторону исходного диапазона «шагать» дальше: это будет область 0–50 либо 51–100. Если первый вариант, то далее алгоритм предложит число 25 и так далее. Математические законы предполагают, что если число 100 делить вдвое 7 раз, мы гарантированно получим результат в районе единицы.

Можно найти число и в диапазоне побольше — от 0 до 127 или от 1 до 128. Всё потому, что 2 7 =128. Соответственно, если у нас будет 8 попыток, область можно увеличить до 256, если 9 — до 512 и т. д. По этому же принципу работают бинарные деревья.

Но решать всё вручную с калькулятором наперевес — прошлый век. Давайте подключим код и посмотрим, как с этим справится программа.

Решение кодом

Воспроизведём решение с помощью Java без использования графического интерфейса. При желании всегда можно подключить Swing или JavaFX.

Для начала определимся с переменными, которые нам потребуются:

Поскольку мы будем работать с терминалом, подключим слушатель событий с помощью класса Scanner:

И объявим переменную слушателя:

Понравилась задачка? Держите ещё один математический фокус в виде гипотезы Коллатца.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *