PKU 2005 Blackjack

PKU 2005 Blackjack

问题:
http://poj.org/problem?id=2005

思路:
简单题,但是容易错
特殊情况: 两张牌都是Ace,这也是Ace需要被当作是1的唯一情况

代码:
 1  #include < stdio.h >
 2  #include < stdlib.h >
 3  #include < string .h >
 4  int  player, dealer;
 5  int  n, count[ 14 ];
 6  char  card[ 3 ][ 2 ];
 7 
 8  int
 9  score( char  ch)
10  {
11       if (ch  ==   ' A ' )
12           return   11 ;
13       else   if (ch  ==   ' T '   ||  ch == ' J '   ||  ch == ' Q '   ||  ch == ' K ' )
14           return   10 ;
15       else
16           return  ch - ' 0 ' ;
17  }
18 
19  int
20  main( int  argc,  char   ** argv)
21  {
22       int  i, tmp, total;
23       while (scanf( " %d " & n) != EOF  &&  n) {
24          total  =  player  =  dealer  =   0 ; memset(count,  0 sizeof (count));
25           for (i = 0 ; i < 3 ; i ++ ) {
26              scanf( " %s " , card[i]);
27              tmp  =  score(card[i][ 0 ]);
28               ++ count[tmp];
29               if (i  ==   0 )
30                  dealer  +=  tmp;
31               else
32                  player  +=  tmp;
33          }
34           if (player  ==   22 /*  two Ace  */
35              player  =   12 ;
36           for (i = 2 ; i <= 11 ; i ++ ) {
37               if ((dealer + i == 22   ?   12  : dealer + i)  <  player) {
38                   if (i  ==   10 )
39                      total  +=  ( 4 * 4 * n - count[i]);
40                   else
41                      total  +=  ( 4 * n - count[i]);
42              }
43          }
44          printf( " %.3f%%\n\n " , (( double )total) / ( 52 * n - 3 ) * 100 );
45      }
46  }

你可能感兴趣的:(PKU 2005 Blackjack)