POJ 2005 Blackjack(水题,考验耐心。极易出错)
来源:互联网 发布:mac视频播放器 mpv 编辑:程序博客网 时间:2024/06/04 19:34
题意:21点游戏,玩家和庄家各从牌堆中抽两张牌。分别有A,2,3,4,5,6,7,8,9,T,J,Q,K这几种牌。T,J,Q,K对应的数值都是10,A对应的数值可能是11或者1,但是只有当两张牌同时为A的情况下,其中的一个才能为1.
输入,牌堆个数deck,然后依次输入三个数,分别为庄家明牌,玩家的两张牌。玩家根据庄家的明牌计算自己胜利的概率。
分析:一定要特别注意两张牌都为A的情况,和为12.要注意一下。
用一个长度大于或等于14的数组,存储一下,每张牌对应出现的情况,方便之后在计算总数时减去。
贴一下代码:(240k,47ms)
C++语言:
#include<iostream>
using namespace std;
int score(char ch) //将输入的字符转换成整型
{
if(ch=='A')
return 11;
else if(ch =='T' || ch=='J'||ch=='Q'||ch=='K')
return 10;
else
return ch-'0';
}
intmain()
{
int deck,i;
char card[3]; //存储输入数据
int a[3];
int sum,player,dealer;
//sum为玩家能赢的所有情况,player为玩家手牌的点数
while(cin>>deck,deck)
{
int count[14]={0}; //用于存储对应位置的牌出现的次数
memset(a,0,3);
double left=deck*52-3;
sum = player= dealer = 0;
for(i=0 ;i< 3;i++)
{
cin>>card[i];
a[i]=score(card[i]);
count[a[i]]++;
}
player = a[1]+a[2];
if(player ==22 ) //当玩家的两个牌都是A的时候,相加是等于11+1的。
player=12;
dealer=a[0];
for(i=2 ;i<=11 ;i ++)
{
if( ( (dealer+i==22)?12:dealer+i) <player)
//判断dealer +i的值是否等于22,如果是相当于就是两个A,所以取值为12.如果庄家手牌和小于玩家,玩家赢
{
if(i==10)sum+=deck*4*4- count[i]; //四个10。
else sum+=deck*4-count[i]; //如果出现过,就要减去
}
}
printf("%0.3f%%\n\n",(double)sum*100/left);
}
}
using namespace std;
int score(char ch)
{
}
intmain()
{
}
- POJ 2005 Blackjack(水题,考验耐心。极易出错)
- 考验耐心
- POJ 2005 Blackjack 笔记
- 真滴是考验耐心的电路实验呢!!!
- 很考验毅力和耐心的一道题
- 耐心
- 耐心
- 耐心
- 这是一份耐心和责任的考验--写在前面的话
- 考验
- 考验
- POJ 3750 小孩报数问题(约瑟夫问题 水题 考验细节、编码能力)
- A. Blackjack
- sicily6135. Blackjack
- Blackjack - Intro
- OOD - blackjack
- blackjack权威教程
- Mini-project # 6 - Blackjack
- 屌丝的出路(转)
- 排序问题(不断总结,不断更新)
- POJ 1969 Count on Canton(数学题,找规律)
- POJ 2000 Gold Coins(水题,数学找规律)
- POJ 2101 Honey and Milk Land(水题)
- POJ 2005 Blackjack(水题,考验耐心。极易出错)
- HDOJ 4278(天津网络预选赛1001题)Faulty Odometer
- c/c++资源(源码、开发工具、开发库)
- C/C++编程必备
- JAVA学习1(开始设置)
- Eclipse的相关使用功能
- (10.14)4学习C版数据结构中熟悉malloc函数与C++中的new函数
- (10.14)typedef与结构结合使用问题
- (10.15)C/C++内存分配方式…