8.1 Design the data structures for a generic deck of cards. Explain how you would subclass the data structures to implement blackjack.

这道题让我们设计一个21点纸牌游戏的数据结构,用面向对象的思想来设计。那么既然21点是一种特定的纸牌游戏,它可以是从普通纸牌的基础上派生出来的。所以我们先实现最基本的纸牌类Card,里面包括值和花色,还有一些基本的判断或标记可用性的函数。然后就是基本的牌堆类Deck,可以用来加入牌,洗牌,发牌以及算剩余牌数。还需要一个当前手牌类Hand,可以计算当前分数,可以加牌等。然后就是它们的派生类21点纸牌类BlackJackCard,包括计算值,计算最大最小值,判断是不是Ace等等,然后就是21点手牌类BlackjackHand,计算当前得分,判断是否爆了,是否是21点等等。以下代码为书上代码,有些函数体写实现,所以暂时无法用具体运行。

//C++ defination

enumSuit {Club, Diamond, Heart, Spade};

template

classDeck {public:void setDeckOfCards(vector deckOfCards) {}; //...

void shuffle() {}; //...

intremainingCards() {return _cards.size() -_dealtIndex;

}

vector dealHead(int number) {}; //...

T dealCard() {}; //...

private:

vector_cards;int _dealtIndex = 0;

};classCard {public:

Card(intc, Suit s): _faceValue(c), _suit(s) {};virtual int value() = 0;

Suit suit() {return_suit; };bool isAvailable() { return_available; };void markUnavailable() { _available = false; };void markAvailable() { _available = true; };protected:int_faceValue;

Suit _suit;private:bool _available = true;

};

template

classHand {public:intscore() {int score = 0;for(T card : cards) {

score+=card.value();

}returnscore;

}voidaddCard(T card) {

cards.add(card);

}protected:

vectorcards;

};class BlackJackCard: publicCard {public:

BlackJackCard(intc, Suit s): Card(c,s) {};intvalue() {if (isAce()) return 1;else if (_faceValue >= 11 && _faceValue <= 13) return 10;else return_faceValue;

}intminValue() {if (isAce()) return 1;else returnvalue();

}intmaxValue() {if (isAce()) return 11;else returnvalue();

}boolisAce() {return _faceValue == 1;

}boolisFaceCard() {return _faceValue >= 11 && _faceValue <= 13;

}

};class BlackjackHand: public Hand{public:intscore() {

vector scores =possibleScores();int maxUnder = INT_MIN, minOver =INT_MAX;for(auto a : scores) {if (a > 21 && a

minOver=a;

}else if (a <= 21 && a >maxUnder) {

maxUnder=a;

}

}return maxUnder == INT_MIN ?minOver : maxUnder;

}bool busted() { return score() > 21; };bool is21() { return score() == 21; };bool isBlackJack() {}; //...

private:

vector possibleScores() {}; //...

};

blackjack算法java_[CareerCup] 8.1 Implement Blackjack 实现21点纸牌相关推荐

  1. [CareerCup] 3.1 Implement Three Stacks using Array 使用数组来实现三个栈

    3.1 Describe how you could use a single array to implement three stacks. 这道题让我们用一个数组来实现三个栈,书上给了两种方法, ...

  2. Rabin-Karp算法 java_第 2 章 字符串

    第 2 章 字符串 字符串处理是算法领域里非常重要的内容,其中有些是关于文字处理的,比如语法检查,有些则关于子字符串(子串):或者更笼统地说,是关于模式(pattern)查找的.随着生物信息学的发展, ...

  3. 分级加权打分算法 java_推荐算法炼丹笔记:令人着迷的时间动态CF算法

    作 者:一元 公众号:炼丹笔记 背景 本文是一篇较老的文章,是Yahoo的研究员关于协同过滤中时间动态建模的最为细致的讨论. 顾客对产品的偏好随着时间的推移而变化.随着新选择的出现,产品的认知和受欢迎 ...

  4. 快速生成树算法java_生成树RSTP,快速生成树协议,交换网络必用的破环协议,面试必备...

    一.RSTP 802.1w 标准定义了快速生成树协议 RSTP(Rapid Spanning Tree Protocol),该协议基于 STP 协议,对原有的 STP 协议进行了改进并实现了快速收敛. ...

  5. wifi定位算法 java_记一次APP的so层算法逆向(七)

    " 前言:初学逆向 请多多指教 好累 感觉每天这样肝 人有点受不了了..." 学习到的内容 - 1.新学习到IDA的一些分析时候的小技巧 2.算法还原代码实现的练习(有个参数没有分 ...

  6. hash的算法 java_【数据结构与算法】一致性Hash算法及Java实践

    追求极致才能突破极限 一.案例背景 1.1 系统简介 首先看一下系统架构,方便解释: 页面给用户展示的功能就是,可以查看任何一台机器的某些属性(以下简称系统信息). 消息流程是,页面发起请求查看指定机 ...

  7. [CareerCup] 8.10 Implement a Hash Table 实现一个哈希表

    8.10 Design and implement a hash table which uses chaining (linked lists) to handle collisions. 这道题让 ...

  8. 分级加权评分算法 java_荐书|智能风控:原理、算法与工程实践

    图书简介 风控领域是新兴的机器学习应用场景之一,其特点包括了负样本占比极少.业务对模型解释性要求偏高.业务模型多样.风控数据源丰富等. <智能风控:原理.算法与工程实践>一书共 8 章,包 ...

  9. 定积分算法java_变步长梯形积分算法求解函数定积分

    算法基本原理:把原区间分为一系列小期间(n份),在每个小区间上都用小的梯形面积来近似代替原函数的积分,当小区间足够小时,就可以得到原来积分的近似值.但是这个过程中有一个问题是步长的取值,步长太大精度难 ...

最新文章

  1. SQL Server 2008中的Pivot和UnPivot
  2. VS2015编译32位Opencv310(动态库+静态库,文末有下载链接)
  3. Linux 下源码编译安装 vim 8.1
  4. Struts2之类型转换
  5. HDU - 3081 Marriage Match II(二分+并查集+最大流/匈牙利删边)
  6. 割线法求解过程_求解稀疏优化问题2——临近点方法+半光滑牛顿法
  7. 数据库优化、数据库基础等常用知识点总结
  8. 14.JAVA整型变量
  9. linux bash 获取 国内常见网站的IP列表
  10. java翻译数字串并打印_如何使用Java翻译字符串?
  11. kafka----kafka connect的使用(一)
  12. Linux XZ压缩格式学习
  13. 热流体动压润滑matlab_仿真加快摩擦润滑研究进程
  14. tensorflow实现残差网络(mnist数据集)
  15. 观察数据时易出错的点
  16. 音视频编码格式和封装格式的关系和区别是什么?
  17. PCIE控制器——设备地址空间访问——配置空间
  18. 使用高德地图api在页面中展示地图
  19. lammps一对一课程学习大纲
  20. 基本的信号——冲激信号与冲激序列

热门文章

  1. FCPX插件:Stupid Raisins Block Pop(视频转场插件)
  2. 浅谈程序员的英语学习 - 风口上的猪 - 博客园
  3. win10在不关闭防火墙的情况下实现无线投屏
  4. efm8系列单片机c语言编程,EFM8单片机用Keil编程,头文件怎么写?
  5. Linux学习中Xshell软件出现tom 不在 sudoers 文件中。此事将被报告。
  6. C++运行三维人脸重建 VRN
  7. 京东技术助力十余省抗击疫情 应急资源平台已提供超6.6亿件抗疫物资
  8. 全球名校AI课程库(44)| 慕尼黑工大 · 计算机视觉深度学习进阶课『Advanced Deep Learning for Computer Vision』
  9. anaconda心得(虚拟环境)
  10. 虚拟化Citrix Prob “VDI态势感知” 功能介绍