Реши задачу:

Есть 1000 бутылок вина. Одна из бутылок - отравленная. Есть 10 бокалов. Необходимо налить вино в бокалы (вино из одной бутылки можно наливать в разные бокалы; в одном бокале можно смешивать вино из разных бутылок) и нажать на кнопку. После нажатия, бокалы, где была хоть одна капля яда, разобьются. Существует ли такой способ разлить вино по бокалам, чтобы можно было,  с уверенностью сказать в какой бутылке отравленное вино? Как обобщить ответ для любого количества бутылок и бокалов?
Существует алгоритм, которым можно точно узнать в какой бутылке яд.
1. Налить в первый бокал по капле вина из половины бутылок. Нажать на кнопку.
2. Если бокал разбился, в одной из них яд, а в остальных нет. Повторить пункт 1 со следующим бокалом и половиной бутылок, в одной из которых яд.
3. Если бокал цел, то в этой половине бутылок яда нет и отравленная бутылка в другой половине бутылок. Повторить пункт 1 с другой половиной бутылок.

Таким образом на каждом шаге будет потрачен один или ни одного бокала и вдвое уменьшится число бутылок, среди которых есть отравленная. Таким образом методом индукции задача обобщается на любое количество бокалов и бутылок. За десять шагов таким образом можно идентифицировать одну из 2^10 = 1024 бутылок. 1000 < 1024, поэтому десяти бокалов будет достаточно.