Месяц находим методом половинного деления.
Двоичная запись числа 366 размещается в 9 битах (в 8 битах размещается только 256 чисел , а в 9 битах - уже 512).
То есть , понадобится задать 8 вопросов и девятой фразой будет ответ.
В году 365 (366) дней. Пусть 366, для 365 рассуждение то же.
Рассмотрим самый худший вариант
Середина года - день номер 366/2=183. Это 1 июля.
Первый вопрос: День рождения в первой половине года?
Допустим, да.
Второй вопрос: День рождения в первом квартале?
Допустим, нет. Следовательно во втором.
Второй квартал - это дни с номерами от 92 до 182. Середина - среднее арифметическое. (92+182)/2=137. Это дата 17 мая.
Третий вопрос: День рождения позднее 17 мая?
Допустим, нет.
Следовательно, интервал дат 1 апреля - 17 мая, 91 день. Опять делим на 2, сужая интервал до 22 дней. Это дата 22 апреля.
Четвертый вопрос: День рождения позднее 22 апреля?
Допустим, нет.
Новый диапазон поиска - 23 апреля - 17 мая. Половиним его.
Пятый вопрос: День рождения позднее 29 апреля?
Допустим, нет.
Поиск сузился до 23 - 29 апреля. Снова берем половину.
Шестой вопрос: День рождения позднее 26 апреля?
Допустим, нет.
Интервал дат 23-26 апреля. Половиним.
Седьмой вопрос: День рождения позднее 24 апреля?
Допустим, да.
Интервал дат 25-26 апреля.
Восьмой вопрос: День рождения 25 апреля?
Допустим, нет
Девятая фраза: Ваш день рождения 26 апреля.
--- Python 3.8.3 ---
#1 - file mdir.py
import os
import sys
import difflib
__all__ = ['CreateEmptyDir', 'RmDir']
__here__ = os.path.dirname(os.path.realpath(__file__))
#Функция, создающая папки
def CreateEmptyDir(count, path = __here__):
try:
for i in range(count):
rpath = path + f'\\dir_{i}'
os.mkdir(rpath)
except OSError:
print(f'Failed to create directory {path}')
#Функция, удаляющая папки
def RmDir(mask, path = __here__):
try:
for folder in os.listdir(path):
s = difflib.SequenceMatcher(None, mask, folder)
if s.ratio() > 0.8:
f = path + '\\' + folder
if os.path.isdir(f):
os.rmdir(f)
except OSError as e:
print(f'Failed to remove directory {f}\n{e}')
#Вызов функций из модуля
def main():
CreateEmptyDir(10)
next = input()
RmDir('dir_')
if __name__ == "__main__":
main()
#2 - file randchoise.py
import random
__all__ = ['RandChoise']
def RandChoise(lst):
if len(lst) == 0: return None
return random.choice(lst)
def main():
data = [1,2,3,4]
print(RandChoise(data))
if __name__ == "__main__":
main()
#3 main.py
from mdir import *
from randchoise import *
import time
def main():
CreateEmptyDir(10)
time.sleep(3) #Что бы успели прогрузиться созданные папки
RmDir('dir_')
print(RandChoise([1,2,3,4,5,6,7,8,9,2,1,32,31,2540]))
if __name__ == "__main__":
main()
PascalABC.NET
begin
write('Введите размерность массива через пробел: ');
var MN := ReadArrInteger(2);
var A:= MatrRandomInteger(MN[1],MN[0],0,20);
A.Println();
var max:=A.Cast&<integer>.Max();
writeln('Наибольший элемент: ',max);
writeln('Количество элементов, равных наибольшему элементу: ',
A.Cast&<integer>.Where(t -> t=max).Count());
end.