Задача, яку пропонують на співбесіді у Googlе. Не всі здатні з нею розібратись!

11 років ми вчимо математику в школі з думкою: “А чи знадобляться ці обчислення і дроби мені в житті? 

Як виявляється, знадобляться.

Доведемо вам це за допомогою задачки, яку пропонують на співбесіді у Googlе на посаду менеджера з інфопродуктів. Тобто людини, яка керує програмістами, проектами. Вона відповідає за розробку і успішність поставлених цілей.

Якщо ви зібрались працювати в ІТ-компанії, то зверніть увагу на задачі такого типу.

А от і сама задача.

Вам дано два яйця невідомого походження і доступ до 100-поверхового хмарочоса. Яйця можуть бути надзвичайно крихкими і розбитись, впавши з 1 поверху, а можуть бути настільки міцними, що і не розіб’ються пролетівши зі сотого поверху. 

На вигляд вони однакові за міцністю. Вам потрібно дізнатись з якого максимально високого поверху можуть впасти яйця і не розбитись. Зробити це потрібно за мінімальну кількість спроб( у вашому випадку усних обчислень). 

Вирахуйте поверх!

Таку задачку колись пропонували і дітям в радянських школах. Можливо, хтось пам’ятає розв’язок?

Якщо, ні, то ловіть!

Розв’язання

Задачі такого типу розв’язуються за одним і тим же принципом. Тому може тренуватись!

Перший – найпростіший варіант

І найочевидніший. Але найнеефективніший! Вам потрібно піднятись на перший поверх і вкинути яйце, якщо розбилось, то іти на третій, на четвертий і аж до сотого. В кращому випадку вам знадобиться одна спроба, а в гіршому 100. 

Але ж нам потрібно використати найменше число спроб. Тому такий варіант не для нас.

Другий варіант

Можна розпочати з середини. Тобто, тепер кидаємо яйце з 50-ого поверху. Якщо розбилось, то спускаємось на поверх нижче і аж до першого. Яко не розбилось, то піднімаємось почергового до 100. Тепер максимально нам знадобиться 50 спроб. Вже краще, але до оптимального вирішення ще далеко!

Третій варіант

А що якщо розділити 100 поверхів на 10 секторів по 10 поверхів? Перший раз кидаємо з 10 поверху. Якщо яйце розбилось, йдемо кидати його з першого, другого і так далі.

Якщо з 10 не розбилось, то піднімаємось на 20 поверх. Якщо розбилось, йдемо на 11, 12… Якщо ні піднімаємось на 30. Думаю, принцип ви зрозуміли.

Тут у гіршому випадку у нас вийде 19 спроб. Набагато менше, ніж у першому варіанті, чи не так?

Четвертий – оптимальний варіант

Можна ще більше подробити 100 поверховий будинок. Наприклад, 20 частин по 5 поверхів.

Давайте, зробимо підранку для різних варіацій.

Якщо 2 поверхи, потрібно кидати через один поверх, щоб була найменша кількість кидків.

Якщо 4 поверхи, то кидати вперше потрібно на другому.

Якщо 8 поверхів, то треба кидати на третьому! Так, саме на третьому, а не на четвертому, бо якщо кинути спочатку на четвертому, то в найгіршому випадку доведеться зробити 5 кидків, а не 4.

І тут знадобилося б знання логарифму, тому що тут є збільшення числа. Виходить, що кинути яйце треба з такого поверху, щоб кількість кидків усередині цього кроку була не більшою за найгірший варіант.

Таким чином, якщо N — це кількість поверхів, а k — кількість кидків, виходить k•(k+1)/2≥N. Вирішуємо цю нерівність для N=100 поверхів та отримуємо k=14.

Перевірка

Перший кидок  робимо з 14-го поверху. Другий, якщо яйце не розбилося, з 14+13=27 поверху. Третій, якщо яйце ще не розбилося, з 27+12=39 поверху. І так далі.

Суть проста: щоразу ми додаємо поверхів на одиницю менше, щоб сумарна кількість кидків не перевищила 14 за найгіршого результату. Тому кидаємо з 14, 27, 39, 50, 60, 69, 77, 84, 90, 95, 99.

Припустимо перше яйце розбилося при кидку з 50-го поверху. Виходить, що ми зробили вже 4 кидки. За решту 10 (або раніше) ми точно зрозуміємо, починаючи з якого поверху яйця битимуться. Друге яйце ми спробуємо розбити спочатку з 40 (бо з 39-го вже пробували), потім з 41, 42, …, 49 поверхів. Або друге яйце розіб’ється на одному з цих поверхів, чи ні. В останньому випадку буде рівно 14 кидків (найгірший сценарій).

Така задачка надзвичайно проста для програмістів. Це ази.

А чи впорались ви з цією задачкою?

Завантаження...
Cikavopro.com
Adblock
detector