З огляду на введення додатного цілого числа, виведіть кількість кроків, які потрібно здійснити, щоб знайти вхід через двійковий пошук, починаючи з 1.
Ми моделюємо двійковий пошук цілого числа, яке було задано у якості вводу, в якому змодельований шукач може багаторазово відгадувати ціле число і йому відповісти, чи він занадто високий, занадто низький чи правильний. Стратегія пошуку цілого числа така:
Нехай n - ціле число, подане як вхід, який ми намагаємося знайти.
Почніть з здогадки з 1. (Для кожної здогадки збільште кількість кроків (незалежно від того, правильна вона чи ні), і негайно зупиніть та виведіть загальну кількість кроків, якщо здогадка була правильною.)
Подвійне здогадку повторно, поки здогадка не перевищує n (цільове число). (Або, якщо це правильно, але це вже охоплено нашим правилом правильної здогадки, згаданим вище.)
Тепер встановіть верхню межу першої потужності на 2, яка більша за n (тобто число, що було тільки здогадано), і встановіть нижню межу потужності 2 безпосередньо під нею.
Неодноразово відгадуйте середнє значення (округлене вниз) верхньої та нижньої межі. Якщо вона занадто висока, встановіть її як верхню межу. Якщо він занадто низький, встановіть його як нижню межу. Ця процедура гарантовано, що врешті-решт приведе до правильної здогадки.
Ось приклад для введення n = 21:
1 -> 2 -> 4 -> 8 -> 16 -> 32 -> 24 -> 20 -> 22 -> 21
\__________________________/
repeated doubling \________________________/
repeated averaging
Оскільки це код-гольф , найкоротший код у байтах виграє.
Ось усі результати від n = 1 до n = 100:
1
2
4
3
6
5
6
4
8
7
8
6
8
7
8
5
10
9
10
8
10
9
10
7
10
9
10
8
10
9
10
6
12
11
12
10
12
11
12
9
12
11
12
10
12
11
12
8
12
11
12
10
12
11
12
9
12
11
12
10
12
11
12
7
14
13
14
12
14
13
14
11
14
13
14
12
14
13
14
10
14
13
14
12
14
13
14
11
14
13
14
12
14
13
14
9
14
13
14
12
Ось кілька великих тестових випадків:
1234 -> 21
1337 -> 22
3808 -> 19
12345 -> 28
32768 -> 16
32769 -> 32
50000 -> 28