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();   }