Страница 1 из 1

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

Добавлено: 01 авг 2003, 19:04
Циник
Задача писал(а):Три русских программиста выпили пива в пятницу вечером и захотели узнать свою среднюю зарплату.
Так как все они уже достаточно долгое время прожили в Канаде и были синьёрами, то никто из них не желал выдавать другим свою собственную зарплату.

Могут ли русские программисты посчитать свою среднюю зарплату, не нарушая этого условия, и если могут, то как?

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

Добавлено: 01 авг 2003, 20:54
ajkj3em
Циник писал(а):
Задача писал(а):Три русских программиста выпили пива в пятницу вечером и захотели узнать свою среднюю зарплату.
Так как все они уже достаточно долгое время прожили в Канаде и были синьёрами, то никто из них не желал выдавать другим свою собственную зарплату.

Могут ли русские программисты посчитать свою среднюю зарплату, не нарушая этого условия, и если могут, то как?
илиментарна, тов циник. поскольку они программисты, то
наверняка могут написать простую программу, которая отключает
эхо на консоли и три раза спрашивает зарплату, а потом считает
и показывает среднее. или мы таки не ищем легких путей ? :)

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

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

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

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

Однако нет ли у задачи более математического, что ли, решения? А то ведь найти в кармане сто спичек или одноцентовых монет может быть не под силу даже русскому программисту :twisted:

Давайте для определенности предположим, что карманы у программистов пустые, а на столе, кроме пива и закуски, лежат только стопка салфеток да пара карандашей.

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

Добавлено: 02 авг 2003, 08:50
ilid
Тут наверно сходимость. Надо подумать, пишу формулы.

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

Добавлено: 02 авг 2003, 09:09
Alexan
Циник писал(а):
Alexan писал(а):Каждый подходит к бармену и говорит на ухо свою зарплату, бармен считает и выдает результат. :)
Xoрошая идея, но не годится :twisted:
Русские программисты настолько долго уже живут в Канаде, что не желают раскрывать свою зарплату никому, в особенности бармену :twisted:
В любом случае если посчитают среднюю зарплату каждый может высчитать сколько в сумме получают другие. Тогда можно сделать так: перый пишет на листочке какую-то сумму, второй не показывая, вычитает из нее свою зарплату, дает результат третьему, третий вычитает свою и выдает результат первому. Первый вычитает свою зарплату, вычитает результат из задуманной суммы и делит на 3.

Добавлено: 02 авг 2003, 09:21
Циник
Отлично, товарищ Алексан!
Задача решена.

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

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

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

Добавлено: 02 авг 2003, 20:59
Циник
drain bamage писал(а):если уж и randomizировать процесс, то надо пускать бумажку
по кругу два раза - первый раз прибавляем случайные числа,
второй - вычитаем зарплаты и seeds
Отлично, товарищ! Это также и "мой" вариант :twisted:

Однако оба варианта обладают следующим недостатком для любого числа N участвующих программистов (N > 3): двум вероломным программистам, сговорившись, легко узнать зарплату одного другого программиста, не раскрывая никому своей собственной (как? :twisted: )

Можно ли модифицировать алгоритм так, чтобы избавиться от этого недостатка?

Добавлено: 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-ому и последнему программисту нельзя обмениваться данными. :lol: