Задача писал(а):Три русских программиста выпили пива в пятницу вечером и захотели узнать свою среднюю зарплату.
Так как все они уже достаточно долгое время прожили в Канаде и были синьёрами, то никто из них не желал выдавать другим свою собственную зарплату.
Могут ли русские программисты посчитать свою среднюю зарплату, не нарушая этого условия, и если могут, то как?
Средняя зарплата
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Циник
- Завсегдатай
- Сообщения: 442
- Зарегистрирован: 17 фев 2003, 17:17
Средняя зарплата
- ajkj3em
- Маньяк
- Сообщения: 2063
- Зарегистрирован: 12 ноя 2006, 06:53
Re: Средняя зарплата
илиментарна, тов циник. поскольку они программисты, тоЦиник писал(а):Задача писал(а):Три русских программиста выпили пива в пятницу вечером и захотели узнать свою среднюю зарплату.
Так как все они уже достаточно долгое время прожили в Канаде и были синьёрами, то никто из них не желал выдавать другим свою собственную зарплату.
Могут ли русские программисты посчитать свою среднюю зарплату, не нарушая этого условия, и если могут, то как?
наверняка могут написать простую программу, которая отключает
эхо на консоли и три раза спрашивает зарплату, а потом считает
и показывает среднее. или мы таки не ищем легких путей ?

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

- Marmot
- Графоман
- Сообщения: 39273
- Зарегистрирован: 17 фев 2003, 17:58
- Откуда: Caulfeild
- Контактная информация:
Надо приравнять допустим 1к$ как какому нибудь нераспознаваемому предмету (1 спичка или 1 цент),
отсчитать необходимое количество предметов и бросить куда-нибудь что-бы не было видно сколько кидаем.
Дальнейшее очевидно...
Только не надо говорить что у русских программистов нету монеток или спичек...
отсчитать необходимое количество предметов и бросить куда-нибудь что-бы не было видно сколько кидаем.
Дальнейшее очевидно...
Только не надо говорить что у русских программистов нету монеток или спичек...

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

Давайте для определенности предположим, что карманы у программистов пустые, а на столе, кроме пива и закуски, лежат только стопка салфеток да пара карандашей.
-
- Завсегдатай
- Сообщения: 213
- Зарегистрирован: 17 фев 2003, 16:05
- Откуда: NN - Montreal - Charlottetown - Montreal
-
- Завсегдатай
- Сообщения: 255
- Зарегистрирован: 19 мар 2003, 13:31
- Циник
- Завсегдатай
- Сообщения: 442
- Зарегистрирован: 17 фев 2003, 17:17
-
- Завсегдатай
- Сообщения: 213
- Зарегистрирован: 17 фев 2003, 16:05
- Откуда: NN - Montreal - Charlottetown - Montreal
В любом случае если посчитают среднюю зарплату каждый может высчитать сколько в сумме получают другие. Тогда можно сделать так: перый пишет на листочке какую-то сумму, второй не показывая, вычитает из нее свою зарплату, дает результат третьему, третий вычитает свою и выдает результат первому. Первый вычитает свою зарплату, вычитает результат из задуманной суммы и делит на 3.Циник писал(а):Xoрошая идея, но не годитсяAlexan писал(а):Каждый подходит к бармену и говорит на ухо свою зарплату, бармен считает и выдает результат.![]()
Русские программисты настолько долго уже живут в Канаде, что не желают раскрывать свою зарплату никому, в особенности бармену
- Циник
- Завсегдатай
- Сообщения: 442
- Зарегистрирован: 17 фев 2003, 17:17
- ajkj3em
- Маньяк
- Сообщения: 2063
- Зарегистрирован: 12 ноя 2006, 06:53
и в результате первый знает сумму зарплат второго и третьегоAlexan писал(а):В любом случае если посчитают среднюю зарплату каждый может высчитать сколько в сумме получают другие. Тогда можно сделать так: перый пишет на листочке какую-то сумму, второй не показывая, вычитает из нее свою зарплату, дает результат третьему, третий вычитает свою и выдает результат первому. Первый вычитает свою зарплату, вычитает результат из задуманной суммы и делит на 3.Циник писал(а):Xoрошая идея, но не годитсяAlexan писал(а):Каждый подходит к бармену и говорит на ухо свою зарплату, бармен считает и выдает результат.![]()
Русские программисты настолько долго уже живут в Канаде, что не желают раскрывать свою зарплату никому, в особенности бармену
если уж и randomizировать процесс, то надо пускать бумажку
по кругу два раза - первый раз прибавляем случайные числа,
второй - вычитаем зарплаты и seeds
-
- Завсегдатай
- Сообщения: 213
- Зарегистрирован: 17 фев 2003, 16:05
- Откуда: NN - Montreal - Charlottetown - Montreal
В любом случае, зная среднюю зарплату можно вычислить сумму зарплат двух остальных.drain bamage писал(а):и в результате первый знает сумму зарплат второго и третьегоAlexan писал(а):В любом случае если посчитают среднюю зарплату каждый может высчитать сколько в сумме получают другие. Тогда можно сделать так: перый пишет на листочке какую-то сумму, второй не показывая, вычитает из нее свою зарплату, дает результат третьему, третий вычитает свою и выдает результат первому. Первый вычитает свою зарплату, вычитает результат из задуманной суммы и делит на 3.Циник писал(а):Xoрошая идея, но не годитсяAlexan писал(а):Каждый подходит к бармену и говорит на ухо свою зарплату, бармен считает и выдает результат.![]()
Русские программисты настолько долго уже живут в Канаде, что не желают раскрывать свою зарплату никому, в особенности бармену
если уж и randomizировать процесс, то надо пускать бумажку
по кругу два раза - первый раз прибавляем случайные числа,
второй - вычитаем зарплаты и seeds
- ajkj3em
- Маньяк
- Сообщения: 2063
- Зарегистрирован: 12 ноя 2006, 06:53
- Циник
- Завсегдатай
- Сообщения: 442
- Зарегистрирован: 17 фев 2003, 17:17
Отлично, товарищ! Это также и "мой" вариантdrain bamage писал(а):если уж и randomizировать процесс, то надо пускать бумажку
по кругу два раза - первый раз прибавляем случайные числа,
второй - вычитаем зарплаты и seeds

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

Можно ли модифицировать алгоритм так, чтобы избавиться от этого недостатка?
-
- Завсегдатай
- Сообщения: 255
- Зарегистрирован: 19 мар 2003, 13:31
А вот как:
если зарплаты А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-ому и последнему программисту нельзя обмениваться данными.
если зарплаты А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-ому и последнему программисту нельзя обмениваться данными.
