/* Calcul simpliste de la probabilite de gagner un match de tennis. Ne prend pas en compte 1) l'alternation de service 2) l'egalite 3) les jeux decisifs ou le fait de devoir gagner deux jeux de plus pour gagner un set 4) les efforts speciaux de l'opposant et l'aspect psychologique */ #define effort 20 /*le nombre de fois que je suis capable de faire un effort special*/ #define sets 3 /*le nombre de sets qu'il faut gagner*/ #define games 6 /*le nombre de jeux qu'il faut gagner dans u set*/ #define points 4 /*le nombre de points qu'il faut gagner dans un jeu*/ #define probwin 0.49 /*ma probabilite de gagner chaque point sauf effort special*/ #define probwineff 0.55 /*ma probabilite de gagner si je fais un effort special*/ double Proba[effort+1][sets+1][sets+1][games][games][points][points]; void initialise(P) double P[effort+1][sets+1][sets+1][games][games][points][points]; { int eff,swon,slost; for (eff=0;eff<=effort;eff++) for (slost=0;slost=0;swon--) for (slost=sets-1;slost>=0;slost--) for (gwon=games-1;gwon>=0;gwon--) for (glost=games-1;glost>=0;glost--) for (pwon=points-1;pwon>=0;pwon--) for (plost=points-1;plost>=0;plost--) { double best=0,p,peff; int sw,sl,gw,gl,pw,pl; sw=swon;sl=slost;gw=gwon;gl=glost;pw=pwon+1;pl=plost; if (pw==points) {gw++;pw=0;pl=0; if (gw==games) {sw++;gw=0;gl=0;}} p=probwin*P[eff][sw][sl][gw][gl][pw][pl]; sw=swon;sl=slost;gw=gwon;gl=glost;pw=pwon;pl=plost+1; if (pl==points) {gl++;pl=0;pw=0; if (gl==games) {sl++;gl=0;gw=0;}} p+=(1-probwin)*P[eff][sw][sl][gw][gl][pw][pl]; if (eff>0) { sw=swon;sl=slost;gw=gwon;gl=glost;pw=pwon+1;pl=plost; if (pw==points) {gw++;pw=0;pl=0; if (gw==games) {sw++;gw=0;gl=0;}} peff=probwineff*P[eff-1][sw][sl][gw][gl][pw][pl]; sw=swon;sl=slost;gw=gwon;gl=glost;pw=pwon;pl=plost+1; if (pl==points) {gl++;pl=0;pw=0; if (gl==games) {sl++;gl=0;gw=0;}} peff+=(1-probwineff)*P[eff-1][sw][sl][gw][gl][pw][pl]; if (peff>p) p=peff; } P[eff][swon][slost][gwon][glost][pwon][plost]=p; } } int main () {initialise(Proba); fill(Proba); printf("Probability of winning=%f\n",Proba[effort][0][0][0][0][0][0]); }