enum TYPE_COMB { LE16=-1, EQ17=0, EQ21=4, B_JACK=5, GE22=6 }; enum IND_CARDS { CARD_2=0, CARD_10=8, CARD_A=9 }; int ResultForDiler( int n_cards, int *Cards ) { int ii, num_ace, sum_hard, sum_ace, sum_all; for( ii=sum_hard=sum_ace=num_ace=0; ii= 22 ) return GE22; } else sum_ace += ((num_ace++)? 1 : 11); } sum_all = sum_hard + (((sum_hard + sum_ace) >= 22)? num_ace : sum_ace); if( sum_all == 21 && n_cards == 2 ) return B_JACK; return ((sum_all >= 22)? GE22 : (sum_all <= 16)? LE16 : (sum_all-17)); } void AnalHitDiler( void ) { double CurPart[12], CurMul[12], PercComb[10][7]; int ii, is, res, n_cards, Cards[12]; for( is=CARD_2; is<=CARD_A; is++ ) { for( ii=0; ii<7; ii++ ) PercComb[is][ii] = 0.; CurPart[0] = CurMul[0] = 1.; Cards[0] = is; n_cards = 1; while( 1 ) { if( (res = ResultForDiler(n_cards, Cards)) == LE16 ) { CurPart[n_cards] = (1./13.); CurMul[n_cards] = CurMul[n_cards-1] * CurPart[n_cards]; Cards[n_cards++] = CARD_2; } else { PercComb[is][res] += CurMul[n_cards-1]; while( (++Cards[n_cards-1] > CARD_A) ) { if( --n_cards == 1 ) goto NEXT; } ii = n_cards - 1; CurPart[ii] = ((Cards[ii] == CARD_10)? 4. : 1.)/13.; CurMul[ii] = CurMul[ii-1] * CurPart[ii]; } } NEXT:; } // Здесь возможна печать найденных параметров: // массив PercComb[10][7] соответствует таблице "Набор // карт дилером", представленной на сайте www.lig.ru // Отличие только при переборе на 8-ке. - На сайте // опечатка: указано 24.27, правильно - 24.47 } void main( void ) { AnalHitDiler(); }