#include < iostream> #include < stdio.h> #include < conio.h> #include < time.h> using namespace std; int main(){ srand(unsigned(time(; int n; cout < < "n = "; cin > > n; int a[100]; cout < < "source massive \n"; for (int i = 0; i < n; i++) { a[i] = rand() % 21; cout < < a[i] < < " "; } for (int i = 0; i < n - 1; i++) for(int j = 0; j < n - i - 1; j++) if (a[j] > a[j + 1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } cout < < "\nsorted massive \n"; for (int i = 0; i < n; i++) cout < < a[i] < < " "; _getch(); return 0; }
самая оптимальная стратегия угадывания - дихотомия, то есть деление отрезка пополам и задавание вопроса больше? (или меньше? )
например, загадано 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 бит. можно ещё сократить немного, так как в последующем вопросе используется информация из предыдущего(один из концов интервала).
уточни, что имеется в виду под фразой "какое количество информации", иначе неопределена и допускает многочисленные толкования.
Поделитесь своими знаниями, ответьте на вопрос: