Injecting side effects by abusing comma operator

Comma operator can be used sometimes to inject side effects into expressions:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {
    int max = 10;
    double x = 0;

    while (max--, printf("%d\n", max), max) {
        /* sth */
    }

    x = printf("x: %f", x), x = sqrt(x), printf(", sqrt(x): %f\n", x), x;

    return EXIT_SUCCESS;
}

Milionerzy: najlepsza kolejność wykorzystania kół ratunkowych

Grasz w milionerów, masz wszystkie koła ratunkowe i nagle dostajesz makabryczne pytanie. Nie wiesz. Bierzesz koła. Najpierw 50:50, a później publiczność, czy najpierw publiczność, a potem 50:50? Ta dyskusja rozgorzała na joemosterze, wiec i ja postanowiłem się temu przyjrzeć.

Warunki początkowe

Zakładam, że 10% osób zna odpowiedz na pytanie, a reszta zaznacza losową odpowiedz. Publiczność to około kilkadziesiąt osób, jest ich więc na tyle dużo, że można założyć, że odpowiedzi tych którzy strzelają rozłożą się równomiernie. Mamy zatem:

10% - osoby znające odpowiedz
90% - osoby zgadujące

Wariant I, najpierw 50:50

Jeśli weźniemy najpierw 50:50, to zostawimy publiczności wybór między dwiema opcjami, rozkład odpowiedzi będzie wyglądał następująco:

odpowiedz poprawna: 0.5 * 90% + 10% = 55%
odpowiedz błędna:   0.5 * 90% = 45%

Poprawną odpowiedz wskaże 55% głosujących.