понедельник, 4 апреля 2011 г.

Средняя зарплата

Три программиста пошли после работы пить пиво. По ходу обсуждения тяжёлой и неказистой жизни они решили посчитать свою среднюю зарплату. К сожалению, они все подписывали NDA и не могут просто назвать свои зарплаты друг другу. Как им поступить, чтобы всё-таки посчитать среднюю зарплату?

У программистов при себе нет никаких бумажек или ручек, поэтому они вынуждены передавать информацию исключительно на словах. Впрочем, они могут говорить что-нибудь одному коллеге так, чтобы не услышал третий.

Ситуация, когда кто-то узнаёт, например, что зарплаты остальных X и Y, но не знает, у кого какая, противоречит правилам.

Решение
Пусть зарплаты программистов X, Y и Z.

1) Первый задумывает случайное число R и сообщает второму сумму X+R.
2) Второй прибавляет к ней свою зарплату и сообщает третьему сумму X+Y+R.
3) Третий также добавляет свою зарплату и сообщает первому результат X+Y+Z+R.
4) Первому программисту остаётся вычесть из суммы известное ему число R и разделить результат на 3.

Способ хорош тем, что он обобщается на большее число участников.

Комментариев нет:

Отправить комментарий