//PascalABC.NET 3.2 сборка 1318Var s,a:string; i:integer; c:char;begin s:=’01234567′; for i:=1 to 3 do begin c:=s[length(s) div 2]; writeln(‘Число больше ‘,c,’?’); readln(a); if a=’Да’ then delete(s,1,length(s) div 2) else delete(s,length(s) div 2+1,length(s) div 2); end;writeln(s);end. Пример работы программы:Число больше 3?ДаЧисло больше 5?НетЧисло больше 4?Нет4
Источник: znanija.site
Угадать число от 0 до 100 за 7 попыток — математический трюк
Этот математический фокус не так сложен, как может показаться на первый взгляд. Более того, решение мы реализуем программно на языке Java. Приступим?
Игра «Угадай число» на python
Условие
Если расписать весь процесс поэтапно, выглядит это следующим образом:
- Вы загадываете число от 0 до 100.
- Программа выводит целое число в рамках данного диапазона.
- Вы отвечаете, ваше число больше, меньше или равно тому, что вывела программа.
- Если число больше либо меньше, программа продолжает предлагать варианты.
- За 7 или менее попыток число гарантированно угадывается.
Решение
На самом деле, никакого особого секрета здесь нет, и решение строится на бинарном поиске. Это простая алгоритмическая задача, смысл которой в том, чтобы каждый раз делить оставшийся диапазон на 2. Таким образом мы с каждой попыткой вдвое сокращаем область поиска, увеличивая шансы на успех. Вот и весь математический фокус.
Допустим, первой догадкой алгоритма будет число 50, после чего становится понятно, в какую сторону исходного диапазона «шагать» дальше: это будет область 0–50 либо 51–100. Если первый вариант, то далее алгоритм предложит число 25 и так далее. Математические законы предполагают, что если число 100 делить вдвое 7 раз, мы гарантированно получим результат в районе единицы.
Можно найти число и в диапазоне побольше — от 0 до 127 или от 1 до 128. Всё потому, что 2 7 =128. Соответственно, если у нас будет 8 попыток, область можно увеличить до 256, если 9 — до 512 и т. д. По этому же принципу работают бинарные деревья.
Ведущий специалист (программист) АО «Гринатом» , Новосибирск , По итогам собеседования
Но решать всё вручную с калькулятором наперевес — прошлый век. Давайте подключим код и посмотрим, как с этим справится программа.
Решение кодом
Воспроизведём решение с помощью Java без использования графического интерфейса. При желании всегда можно подключить Swing или JavaFX.
Для начала определимся с переменными, которые нам потребуются:
//заданные границы: int min = 0; int max = 100; //середина области: int midrange = Math.round((min + max) / 2); //строка для работы с терминалом: String strInput = «»;
Поскольку мы будем работать с терминалом, подключим слушатель событий с помощью класса Scanner:
Игра «Отгадай задуманное число»
import java.util.Scanner;
И объявим переменную слушателя:
Scanner scan = new Scanner(System.in);
Понравилась задачка? Держите ещё один математический фокус в виде гипотезы Коллатца.
Следите за новыми постами по любимым темам
Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.
Поделиться
Реклама на Tproger: найдем для вас разработчиков нужного стека и уровня.
Курс «Основы программирования на Python»
Старт 3 июля, 2 месяца, онлайн, от 6664 до 19 990 ₽ в месяц
Курс «SQL-Injection Master»
Старт 10 июля, 3 месяца, онлайн, от 11 997 до 35 990 ₽ в месяц
Что думаете?
Комментирую от имени компании
Показать все комментарии
Фотография
Обсуждают сейчас
Увеличиваем конверсию в собеседования бесплатно, онлайн, без регистрации
30 минут назад
У вас отличный опыт.
Карьерный путь: из 1C специалиста в Тимлида разработки на Python
6 часов назад
Источник: tproger.ru
Программа которая угадывает задуманное число
programmer2
: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Игра «Угадай число». Помогите с алгоритмом
Здравствуйте, уважаемые форумчане. Я новенькая) Мне нужна помощь. Мне нужно написать программу, которая угадывает задуманное пользователем число.
Условие:
Написать программу «Угадай число». Суть программы: пользователь загадывает число, а компьютер должен отгадать число. Компьютер может задавать вопрос: «делится ли задуманное Вами число на (число)». Пользователь вводит только ответ «да» или «нет». Программа должна за время log2(N) угадать задуманное мною число.
Входные данные- N-интервал в котором будет пользователь загадывать число (от 1 до N), а n-загаданное число пользователем(правда зачем его вводить пользователю-не знаю.. ) Вывод должен быть консольный. язык Visual C++.
Помогите, пожалуйста, придумать алгоритм.. Изрыла весь интернет. Есть реализации программы, однако там число загадывает компьютер, а человек угадывает. У меня же всё наоборот.. Очень нужна помощь.
Регистрация: 08.03.2016
Источник: www.tehnari.ru