POJ 2005
来源:互联网 发布:pkpm钢结构计算软件 编辑:程序博客网 时间:2024/06/05 19:13
题意:
21点游戏规则:http://baike.baidu.com/view/302185.htm
题目设定一玩家与一庄家对战,牌面有2-9、T、J、Q、K、A,T、J、Q、K是10,A是11或1,当爆牌(两手牌之和大于21)时,A变为1。
要求:输入卡片套数(DECK,每套牌52张),输入庄家翻过来的一张卡牌的点数和玩家手持两张卡牌的点数,
输出玩家的胜率。
重点:注意庄家那张明牌点数为11时的情况。
代码:
#include<iostream>
#include<iomanip>
usingnamespace std;
intmain()
{
int deck;
while(cin>>deck,deck)
{
double total=52*deck-3,sum;
int n0,dl,pl1,pl2,player;
char a,b,c;
cin>>a>>b>>c;
if(a>49&&a<58)dl=a-48;
else if(a=='A')dl=11;
else dl=10;
if(b>49&&b<58)pl1=b-48;
else if(b=='A')pl1=11;
else pl1=10;
if(c>49&&c<58)pl2=c-48;
else if(c=='A')pl2=11;
else pl2=10;
player=pl1+pl2==22?12:pl1+pl2;
if(dl!=11)
if(dl>=player-2){cout<<"0.000%"<<endl<<endl;continue;}
if(player-dl>11){cout<<"100.000%"<<endl<<endl;continue;}
n0=player-dl-2,sum=0;
if(dl==11) //庄家的明牌点数为11
{
if(dl>=player-1){cout<<"0.000%"<<endl<<endl;continue;}
if(pl1==11)sum+=4*deck-2;
else if(pl2==11)sum+=4*deck-2;
else sum+=4*deck-1;
}
for(int i=0,j=2;i<n0;i++,j++)
{
if(j==dl)
{
if(j==10)
sum+=16*deck-1;
else sum+=4*deck-1;
if(j==pl1)sum-=1;
if(j==pl2)sum-=1;
continue;
}
if(j==pl1)
{
if(j==10)
sum+=16*deck-1;
#include<iomanip>
using
int
{