Три программиста пошли после работы пить пиво. По ходу обсуждения тяжёлой и неказистой жизни они решили посчитать свою среднюю зарплату. К сожалению, они все подписывали NDA и не могут просто назвать свои зарплаты друг другу. Как им поступить, чтобы всё-таки посчитать среднюю зарплату?
У программистов при себе нет никаких бумажек или ручек, поэтому они вынуждены передавать информацию исключительно на словах. Впрочем, они могут говорить что-нибудь одному коллеге так, чтобы не услышал третий.
Ситуация, когда кто-то узнаёт, например, что зарплаты остальных X и Y, но не знает, у кого какая, противоречит правилам.
Решение
Пусть зарплаты программистов X, Y и Z.
1) Первый задумывает случайное число R и сообщает второму сумму X+R.
2) Второй прибавляет к ней свою зарплату и сообщает третьему сумму X+Y+R.
3) Третий также добавляет свою зарплату и сообщает первому результат X+Y+Z+R.
4) Первому программисту остаётся вычесть из суммы известное ему число R и разделить результат на 3.
Способ хорош тем, что он обобщается на большее число участников.
У программистов при себе нет никаких бумажек или ручек, поэтому они вынуждены передавать информацию исключительно на словах. Впрочем, они могут говорить что-нибудь одному коллеге так, чтобы не услышал третий.
Ситуация, когда кто-то узнаёт, например, что зарплаты остальных X и Y, но не знает, у кого какая, противоречит правилам.
Решение
Пусть зарплаты программистов X, Y и Z.
1) Первый задумывает случайное число R и сообщает второму сумму X+R.
2) Второй прибавляет к ней свою зарплату и сообщает третьему сумму X+Y+R.
3) Третий также добавляет свою зарплату и сообщает первому результат X+Y+Z+R.
4) Первому программисту остаётся вычесть из суммы известное ему число R и разделить результат на 3.
Способ хорош тем, что он обобщается на большее число участников.
Комментариев нет:
Отправить комментарий