Интересные задачи по программированию и логике
Создана: 09 Августа 2009 Вск 17:07:11.
Раздел: "Интернет-флейм"
Сообщений в теме: 585, просмотров: 198707
-
-
-
-
Трое заядлых игроков в покер сидят в чате. Предложите процедуру раздачи карт, при которой каждый игрок знает свои карты и не знает карт соперника. Игроки абсолютно рациональны и обладают безграничными вычислительными возможностями, поэтому использование кодов с открытым ключом (типа RSA) недопустимо. В чате можно посылать сообщения, адресованные как всем сразу, так и конкретному лицу.
-
karaganda писал : Тогда тот кто раздает знает карты
Ну вот теперь понятно Тогда, наверное легко - карты нумеруем от 1 до 52. Один игрок называет свою карту, а двое других называют ему в привате произвольный целочисленный сдвиг (кольцевой). Игрок сам рассчитывает итоговый номер карты и получает ее на руки.
Можно упростить - игрок лишь загадывает номер, а сдвиг называет ему один игрок.
В таком случае возникает вопрос, что делать, если сумма номера и сдвигов приведет к такой карте, которая УЖЕ была выдана другому игроку. Любое сообщение такой информации - невозможно, хм... В общем натыкаемся на то, что информация об оставшихся картах должна храниться где-то на "нейтральной стороне". -
Есть золотой песок и три пирата, но нет весов.
Предпочтения пиратов субъективны (действительно равные кучи могут казаться пирату неравными). Но предпочтения стабильны: если пират считал две кучи равными, и видит, что к первой досыпали песок, то он будет считать первую кучу большей. Каждый пират может делить кучу песка на равные кучи, сравнивать несколько куч, отсыпать из большей кучи песок так, чтобы она сравнялась с меньшей.
Предложите конечную процедуру справедливого дележа, при которой у пиратов не было бы зависти (каждый считал бы, что его часть не меньше, чем у других)