🎯 21点扑克牌对战
课后小测 · 共15题
趣味C++课后练习
⚠️ 本次练习已提交,答案已锁定。如需重新练习请联系老师。
🎉 答题完成!
0
📋 一键复制做题报告
📊 知识点掌握情况
第1题
单选题
点数判断
21点游戏中,J、Q、K(花牌)的点数是多少?
A. 1点
B. 10点
C. 13点
D. 看花色决定
正确答案:
B
21点规则里,J、Q、K一律当10点。所以代码里判断hand[i]>=10时,都加10分——不管是10还是J(11)Q(12)K(13)。
第2题
单选题
点数判断
A牌(Ace)在21点里可以当多少点?
A. 只能当1点
B. 只能当11点
C. 可以当1或11,自动选最有利的
D. 当10点
正确答案:
C
A是最灵活的牌!程序的算法是:先把A都当11(最"大"),如果加起来超过21爆了,就把一个A改成1(总和减10),还爆就再改一个。这样A永远选最有利的值。
第3题
单选题
点数判断
什么叫"爆牌(Bust)"?
A. 点数正好21
B. 点数超过21
C. 点数小于10
D. 拿到两张A
正确答案:
B
爆牌就是点数超过21,直接输掉该局。比如16点再要一张10点牌,就变成26爆了。所以16点要不要牌是个经典难题——这就是"走钢丝"的类比!
第4题
单选题
综合应用
赌场庄家的基本策略是什么?
A. 10点就停牌
B. 17点以上必须停牌,不到17必须要牌
C. 一直要牌直到21
D. 随便要牌
正确答案:
B
这是赌场定的"最优策略"——数学证明这样庄家长期胜率最高。代码里就是while(calcPoint(dealer,dCnt)<17)循环要牌,到17就自动停。
第5题
单选题
随机发牌
rand() % 13 + 1 生成的随机数范围是?
A. 0 ~ 12
B. 1 ~ 13
C. 1 ~ 10
D. 0 ~ 13
正确答案:
B
rand()%13的余数是0~12,再加1变成1~13,正好对应A(1)、2~10、J(11)、Q(12)、K(13)。一副牌13个点数,完美对应!
第6题
单选题(中)
综合应用
数组 int hand[10] 最多能存几张牌?
A. 9张
B. 10张
D. 11张
D. 不限张数
正确答案:
B
int hand[10]表示这个数组有10个位置,下标是0~9,所以能存10张牌。要访问第1张用hand[0],第10张用hand[9]——注意下标从0开始!
第7题
单选题(中)
综合应用
玩家19点,庄家18点,谁赢?
A. 玩家赢(19更接近21)
B. 庄家赢
C. 平局
D. 无法判断
正确答案:
A
21点规则:谁的点数更接近21(且不爆)谁赢。19比18大,更接近21,所以玩家赢。代码里就是else if(pP>dP) cout<<"你赢了"。
第8题
单选题(难)
点数判断
玩家22点(爆牌),庄家25点(也爆牌),这一局谁赢?
A. 玩家赢
B. 庄家赢(玩家先爆,直接输)
C. 平局
D. 重新发牌
正确答案:
B
这是21点最关键的规则!玩家先爆牌就直接输,庄家不用再要牌也赢。所以代码里第一个判断就是if(pP>21) cout<<"你爆牌,庄家赢"——玩家爆了就直接结束,不用比点数。
第9题
单选题(中)
综合应用
函数calcPoint(int hand[], int cnt)的作用是什么?
A. 发一张新牌
B. 计算一手牌的总点数,A自动选1或11
C. 判断谁赢了
D. 随机洗牌
正确答案:
B
这就是函数封装的威力!把"算点数"这件事写成函数,玩家算一次、庄家算一次、判胜负再算一次——写一次到处用,代码更简洁不容易错。函数参数hand[]是这手牌,cnt是有几张。
第10题
单选题(难)
点数判断
"爆牌概率"这个数学概念,生活类比是什么?
A. 抽奖箱里剩多少炸弹
B. 平均每局能赢多少钱
C. 走钢丝往前一步
D. 上课记笔记
正确答案:
A
爆牌概率类比"抽奖箱里剩多少炸弹"——箱子里10、J、Q、K这些"大牌炸弹"越多,你再摸一张就越可能爆。B是期望值的类比,C是策略决策的类比,D是简单统计的类比。
第11题
判断题
综合应用
A牌在任何情况下都必须当11点。
✅ 正确
❌ 错误
正确答案:
❌ 错误
错误!A可以当1也可以当11。程序会自动选最有利的——先全当11,如果加起来爆了就把A改成1(总和减10)。比如A+5+10=16,A当11时总和16不爆,A当1时总和16也不爆,选11更有利。
第12题
判断题
点数判断
玩家爆牌(点数超过21)就直接输掉该局,不用再和庄家比点数。
✅ 正确
❌ 错误
正确答案:
✅ 正确
正确!这是21点最重要的规则。玩家先爆先输,庄家即使也爆了也算玩家输。所以代码里第一个判断就是if(pP>21)直接输出"你爆牌,庄家赢"。
第13题
判断题(中)
综合应用
庄家在16点时必须停牌。
✅ 正确
❌ 错误
正确答案:
❌ 错误
错误!庄家的规矩是"不到17必须要牌"。16点小于17,庄家必须再要一张。17点及以上才停牌。这就是赌场的基本策略。
第14题
判断题
综合应用
数组int hand[10]可以用hand[0]、hand[1]...hand[9]访问里面的牌。
✅ 正确
❌ 错误
正确答案:
✅ 正确
正确!数组下标从0开始。hand[10]有10个位置,下标0~9。第1张牌用hand[0],第2张用hand[1]...这是C++数组的基本规则,别写成hand[10](那会越界)。
第15题
判断题(难)
综合应用
把"算一手牌点数"写成函数calcPoint(),可以在玩家算点、庄家算点、判胜负时重复使用。
✅ 正确
❌ 错误
正确答案:
✅ 正确
正确!这就是函数封装的意义——写一次,到处用。如果不写函数,玩家算点要写一遍、庄家算点又要写一遍、判胜负再写一遍,代码又长又容易写错。函数让代码更简洁、更好维护。
提交答案