Een bedrijf telt een aantal werknemers. De werknemers willen hun gemiddelde jaarloon bepalen, zonder dat iemand daarbij zijn eigen loon moet verklappen. Hoe kunnen ze dat doen?

loonbrief
Paul Meltsner, Ohio (studie voor muurschildering, Belleville, Ohio, postkantoor), ca. 1934-1939, potlood op karton, Smithsonian American Art Museum.

De eerste werknemer kiest een groot willekeurig getal en telt dat op bij zijn eigen jaarloon. Hij fluistert dit bedrag in het oor van de tweede werknemer. De tweede werknemer telt zijn eigen jaarloon op bij het bedrag dat de eerste werknemer hem heeft ingefluisterd, en fluistert dit bedrag in het oor van de derde werknemer, enzoverder.

Wanneer de laatste werknemer zijn eigen jaarloon heeft opgeteld bij het bedrag dat hem werd ingefluisterd, dan fluistert hij het totaalbedrag in het oor van de eerste werknemer. De eerste werknemer trekt het willekeurige bedrag dat hij had gekozen terug af van het totaalbedrag, en deelt het resterende bedrag door het aantal werknemers. Dit resultaat deelt hij mee aan alle werknemers. Op die manier kennen de werknemers hun gemiddelde jaarloon, zonder dat één enkele werknemer weet wat de andere werknemers verdienen.

Invoer

De eerste regel bevat een willekeurig natuurlijk getal dat door de eerste werknemer werd gekozen. Daarna volgen de lonen van alle werknemers van het bedrijf, elk op een afzonderlijke regel. Er zijn altijd minstens drie werknemers. Na het loon van de laatste werknemer volgt nog een regel die het woord stop bevat.

Uitvoer

De bedragen die elke werknemer in het oor van de volgende werknemer fluistert, als ze de procedure toepassen die in de inleiding staat beschreven. Daarna moet het gemiddelde loon van de arbeiders uitgeschreven worden als een floating point getal, afgerond tot en uitgeschreven met 2 cijfers na de komma. Bekijk onderstaand voorbeeld om te zien hoe de uitvoer precies moet opgemaakt worden.

Voorbeeld

Invoer:

645743
89329
34893
34398
23290
23923
23982
28493
29984
89033
stop

Uitvoer:

werknemer #1 fluistert €735072
werknemer #2 fluistert €769965
werknemer #3 fluistert €804363
werknemer #4 fluistert €827653
werknemer #5 fluistert €851576
werknemer #6 fluistert €875558
werknemer #7 fluistert €904051
werknemer #8 fluistert €934035
werknemer #9 fluistert €1023068
gemiddeld loon: €41925.00

Epiloog

Het bovenstaande algoritme is niet helemaal optimaal omdat de werknemers nog steeds enkele zaken kunnen afleiden over het maximale loon van hun collega's. Als werknemer #1 bijvoorbeeld het getal 701.229 doorgeeft aan werknemer #2, dan weet werknemer #2 dat het loon van werknemer #1 niet hoger kan zijn dan dat. Dit kan weggewerkt worden door toe te laten dat het willekeurige getal ook negatief mag zijn — in dat geval kunnen de werknemers geen conclusies meer trekken en wordt de berekening nog steeds op dezelfde manier uitgevoerd.

Epiloog

Peanuts
Patty: "I wonder what teachers make."
Charlie: "A difference Peppermint Patty, they make a difference!"