Самая оптимальная стратегия угадывания - дихотомия, то есть деление отрезка пополам и задавание вопроса больше? (или меньше?)
Например, загадано 50
Последовательность
32 64/2 больше
48 (32+64)/2 больше
56 (48+64)/2 меньше
52 (48+56)/2 меньше
50 (48+52)/2 попал
Теперь о задаче. Вопрос очень некорректный, если бы он звучал, как сколько попыток нужно сделать, чтобы угадать? , то решение простое
64 = 2^6, поэтому нужно 6 попыток 6 = 110b, значит 3 бит достаточно, чтобы в них разместить это количество попыток.
НО в задаче вопрос-то другой! Потому что в процессе отгадывания на каждом шаге нужно знать 1. Концы отрезка, 2. ответ
Концы это 6 бит и 6 бит +ответ 1 бит, итого 13 бит на шаг *6 = 78 бит. Можно ещё сократить немного, так как в последующем вопросе используется информация из предыдущего(один из концов интервала).
Уточни, что имеется в виду под фразой "какое количество информации", иначе задача неопределена и допускает многочисленные толкования.
Запишем условие задачи:
Поскольку в сообщениях одинаковое количество символов, то К1=К2. Соотношение количества информации можно записать как I1=1.5*I2. Общее кол-во символов в алфавите обозначается буквой N, по условию N1<=10, N2<=10.
Решение: I1=K1*i1; I2=K2*i2; Подставим в условие I1=1.5*I2 значения I1 и I2. Получаем K1*i1=1.5*K2*i2
Сократим в обеих частях уравнения К1 и К2, у нас останется
i1=1.5*i2
По условию мощности обоих алфавитов не превышают число 10, запишем это так
10>=2 в степени i1
10>=2 в степени i2
Предположим, что i2=1 бит, тогда i1=1.5 бита (а это противоречит условию)
Предположим, что i2=2 бита, тогда i1=3 бита -это и есть ответ задачи
№1
var A, B, C, sum, razn, proizv: integer; chastnoe: real;
label undf;
begin
undf: writeln('Введите А:');
readln(A);
writeln('Введите B:');
readln(B);
writeln('Введите C:');
readln(C);
sum := A + B + C; // находим сумму АВС
proizv := A * B * C; // находим произведение АВС
razn := A - B; // находим разность А и В
chastnoe := B / C; // находим частное В и С
writeln('Сумма А, В, С: ', sum);
writeln('Произведение А, В, С: ', proizv);
writeln('Разность А и В: ', razn);
writeln('Частное В и С: ', chastnoe);
end.
№2
var A, B, razn: integer;
begin
write('Введите А: ');
readln(A);
write('Введите B: ');
readln(B);
razn := abs( A - B );
if A < B then writeln('Первое число меньше второго на ', razn)
else writeln('Первое число больше второго на ', razn);
end.