Задачка на логику
Такие задачки на логику дают при собеседовании в it
Дано 20 баночек с таблетками. В 19 баночках лежат таблетки весом 1 г, а в одной — весом 1.1 г. Даны весы, показывающие точный вес. Как за одно взвешивание найти банку с тяжелыми таблетками?
Сразу скажу, что решение есть, через некоторое время напишу в комментах... если интересно )
Решение
У нас в распоряжении есть только одно взвешивание. Это значит, что надо найти такой алгоритм, который сразу даст точный и однозначный ответ.
Если мы положим на весы одну нормальную таблетку, они покажут 1 грамм, а если испорченную — 1,1 грамма. Давайте посмотрим, что будет, если из каждой банки мы возьмём по одной таблетке и положим их все на весы:
(19 × 1) + (1 × 1,1) = 20,1.
Отсюда можно сделать два важных вывода:
нельзя брать одинаковое количество таблеток из каждой банки, потому что тогда мы не отличим банки друг от друга;
одна испорченная таблетка даёт лишний вес в 0,1 грамма.
Раз нужно из каждой банки брать какое-то своё количество таблеток, попробуем сделать так:
из первой банки возьмём 1 таблетку;
из второй банки — 2 таблетки;
…
из двадцатой банки — 20 таблеток.
По этой схеме у нас получится всего:
1 + 2 + 3 + ... + 19 + 20 = 210 таблеток.
Теперь нам нужно учесть лишний вес в 0,1 грамма, который даёт каждая испорченная таблетка. Получается, что если у нас будет одна такая, то лишний вес составит 0,1 грамма, если две — 0,2 грамма и так далее. Зная общее количество лишнего веса, можно будет вычислить количество испорченных таблеток:
количество испорченных таблеток = лишний вес / 0,1.
Осталось найти лишний вес. Для этого возьмём 210 таблеток по нашей схеме, взвесим их, а от результата отнимем 210 — вес всех таблеток, если бы они были нормальными и весили по одному грамму каждая.
Ps. Хз правильно или нет , в интернете спиздил ответ