Страница 1 из 1
Средняя зарплата
Добавлено: 01 авг 2003, 19:04
Циник
Задача писал(а):Три русских программиста выпили пива в пятницу вечером и захотели узнать свою среднюю зарплату.
Так как все они уже достаточно долгое время прожили в Канаде и были синьёрами, то никто из них не желал выдавать другим свою собственную зарплату.
Могут ли русские программисты посчитать свою среднюю зарплату, не нарушая этого условия, и если могут, то как?
Re: Средняя зарплата
Добавлено: 01 авг 2003, 20:54
ajkj3em
Циник писал(а):Задача писал(а):Три русских программиста выпили пива в пятницу вечером и захотели узнать свою среднюю зарплату.
Так как все они уже достаточно долгое время прожили в Канаде и были синьёрами, то никто из них не желал выдавать другим свою собственную зарплату.
Могут ли русские программисты посчитать свою среднюю зарплату, не нарушая этого условия, и если могут, то как?
илиментарна, тов циник. поскольку они программисты, то
наверняка могут написать простую программу, которая отключает
эхо на консоли и три раза спрашивает зарплату, а потом считает
и показывает среднее. или мы таки не ищем легких путей ?

Re: Средняя зарплата
Добавлено: 01 авг 2003, 21:35
Циник
drain bamage писал(а):илиментарна, тов циник. поскольку они программисты, то
наверняка могут написать простую программу, которая отключает
эхо на консоли и три раза спрашивает зарплату, а потом считает
и показывает среднее.
Написать, конечно, они могут что угодно, на то они и
синьёры. А если они сидят в баре без лэптопов, а ответ хотят знать прямо сейчас? Так что не годится, товарищ.
или мы таки не ищем легких путей ?

Ни в коем случае

Добавлено: 01 авг 2003, 22:26
Marmot
Надо приравнять допустим 1к$ как какому нибудь нераспознаваемому предмету (1 спичка или 1 цент),
отсчитать необходимое количество предметов и бросить куда-нибудь что-бы не было видно сколько кидаем.
Дальнейшее очевидно...
Только не надо говорить что у русских программистов нету монеток или спичек...

Добавлено: 02 авг 2003, 05:00
Циник
Marmot писал(а):Надо приравнять допустим 1к$ как какому нибудь нераспознаваемому предмету (1 спичка или 1 цент),
отсчитать необходимое количество предметов и бросить куда-нибудь что-бы не было видно сколько кидаем.
Дальнейшее очевидно...
Только не надо говорить что у русских программистов нету монеток или спичек...

Отличная идея, товарищ Мармот!
Однако нет ли у задачи более математического, что ли, решения? А то ведь найти в кармане сто спичек или одноцентовых монет может быть не под силу даже русскому программисту
Давайте для определенности предположим, что карманы у программистов пустые, а на столе, кроме пива и закуски, лежат только стопка салфеток да пара карандашей.
Добавлено: 02 авг 2003, 08:34
Alexan
Каждый подходит к бармену и говорит на ухо свою зарплату, бармен считает и выдает результат.

Добавлено: 02 авг 2003, 08:50
ilid
Тут наверно сходимость. Надо подумать, пишу формулы.
Добавлено: 02 авг 2003, 08:56
Циник
Alexan писал(а):Каждый подходит к бармену и говорит на ухо свою зарплату, бармен считает и выдает результат.

Xoрошая идея, но не годится
Русские программисты настолько долго уже живут в Канаде, что не желают раскрывать свою зарплату
никому, в особенности бармену

Добавлено: 02 авг 2003, 09:09
Alexan
Циник писал(а):Alexan писал(а):Каждый подходит к бармену и говорит на ухо свою зарплату, бармен считает и выдает результат.

Xoрошая идея, но не годится
Русские программисты настолько долго уже живут в Канаде, что не желают раскрывать свою зарплату
никому, в особенности бармену

В любом случае если посчитают среднюю зарплату каждый может высчитать сколько в сумме получают другие. Тогда можно сделать так: перый пишет на листочке какую-то сумму, второй не показывая, вычитает из нее свою зарплату, дает результат третьему, третий вычитает свою и выдает результат первому. Первый вычитает свою зарплату, вычитает результат из задуманной суммы и делит на 3.
Добавлено: 02 авг 2003, 09:21
Циник
Отлично, товарищ Алексан!
Задача решена.
Добавлено: 02 авг 2003, 11:29
ajkj3em
Alexan писал(а):Циник писал(а):Alexan писал(а):Каждый подходит к бармену и говорит на ухо свою зарплату, бармен считает и выдает результат.

Xoрошая идея, но не годится
Русские программисты настолько долго уже живут в Канаде, что не желают раскрывать свою зарплату
никому, в особенности бармену

В любом случае если посчитают среднюю зарплату каждый может высчитать сколько в сумме получают другие. Тогда можно сделать так: перый пишет на листочке какую-то сумму, второй не показывая, вычитает из нее свою зарплату, дает результат третьему, третий вычитает свою и выдает результат первому. Первый вычитает свою зарплату, вычитает результат из задуманной суммы и делит на 3.
и в результате первый знает сумму зарплат второго и третьего
если уж и randomizировать процесс, то надо пускать бумажку
по кругу два раза - первый раз прибавляем случайные числа,
второй - вычитаем зарплаты и seeds
Добавлено: 02 авг 2003, 12:07
Alexan
drain bamage писал(а):Alexan писал(а):Циник писал(а):Alexan писал(а):Каждый подходит к бармену и говорит на ухо свою зарплату, бармен считает и выдает результат.

Xoрошая идея, но не годится
Русские программисты настолько долго уже живут в Канаде, что не желают раскрывать свою зарплату
никому, в особенности бармену

В любом случае если посчитают среднюю зарплату каждый может высчитать сколько в сумме получают другие. Тогда можно сделать так: перый пишет на листочке какую-то сумму, второй не показывая, вычитает из нее свою зарплату, дает результат третьему, третий вычитает свою и выдает результат первому. Первый вычитает свою зарплату, вычитает результат из задуманной суммы и делит на 3.
и в результате первый знает сумму зарплат второго и третьего
если уж и randomizировать процесс, то надо пускать бумажку
по кругу два раза - первый раз прибавляем случайные числа,
второй - вычитаем зарплаты и seeds
В любом случае, зная среднюю зарплату можно вычислить сумму зарплат двух остальных.
Добавлено: 02 авг 2003, 14:13
ajkj3em
Alexan писал(а):
В любом случае, зная среднюю зарплату можно вычислить сумму зарплат двух остальных.
extremely good point

торможу-с
Добавлено: 02 авг 2003, 20:59
Циник
drain bamage писал(а):если уж и randomizировать процесс, то надо пускать бумажку
по кругу два раза - первый раз прибавляем случайные числа,
второй - вычитаем зарплаты и seeds
Отлично, товарищ! Это также и "
мой" вариант
Однако оба варианта обладают следующим недостатком для любого числа
N участвующих программистов (
N > 3): двум вероломным программистам, сговорившись, легко узнать зарплату одного другого программиста, не раскрывая никому своей собственной (
как? 
)
Можно ли модифицировать алгоритм так, чтобы избавиться от этого недостатка?
Добавлено: 02 авг 2003, 22:01
ilid
А вот как:
если зарплаты А1 А2 А3 и А4, то их среднее Ам1234=(А1+А2+А3+А4)/4=((Ам123*3)+А4)/4; таким образом, если 2 вероломных программиста сядут 1-ым и 3-им номером, то первый запомнит сумму начальную, а третий - сумму после трёх зарплат, они следовательно будут знать среднюю зарплату 3 програмистов, а значит и последнего тоже :
А4= Ам1234*4-Ам123*3 - зарплата четвёртого программиста. В общем виде:
АN=Am1..N*N - Am1..N-1*(N-1)
Am1..N - средняя N чисел.
Следовательно 1-ому и последнему программисту нельзя обмениваться данными.
