Presentation is loading. Please wait.

Presentation is loading. Please wait.

题目详细要求、参考资料及更新发布于: http://lamda.nju.edu.cn/xiez/bop19/week_3/ 第三周 代码组织与面向对象初探 1 题目详细要求、参考资料及更新发布于: http://lamda.nju.edu.cn/xiez/bop19/week_3/

Similar presentations


Presentation on theme: "题目详细要求、参考资料及更新发布于: http://lamda.nju.edu.cn/xiez/bop19/week_3/ 第三周 代码组织与面向对象初探 1 题目详细要求、参考资料及更新发布于: http://lamda.nju.edu.cn/xiez/bop19/week_3/"— Presentation transcript:

1 题目详细要求、参考资料及更新发布于: http://lamda.nju.edu.cn/xiez/bop19/week_3/
第三周 代码组织与面向对象初探 1 题目详细要求、参考资料及更新发布于:

2 练习一

3

4 斗地主(提示功能 – 弱智版) 设想你在打扑克牌“斗地主”。现在,上家刚刚出完牌。给定你 当前手中的牌和上家刚刚出的牌,请尝试判断能否用手中的 牌压过对方的牌。如果可以,输出最小的能压过对方牌型的 一组牌。为了简化问题,本题不考虑花色。 “最小的能压过对方牌型”即优先使用与对手相同的牌型,且牌 面数字尽量小。如果无法压过对方,再依次考虑炸弹、王炸。

5 斗地主 斗地主游戏中牌的顺序是:3、4、5、6、7、8、9、10、J、Q、K、A、2、小王、大王,有以下牌型:
单张:任意一张牌,可以被更大的单张压过; 对子:两张同号的牌,可以被更大的对子压过;两张王可以合成一个对; 三带:三张同号的牌,可以不带,或带一张单牌,或带一个对子;可以被更大的三带压过,但是带牌数量要相同,大小只比较三带,不比较被带的牌; 连对:三个或更多连号的对子, 可以被更大且对数相同的连对压过; 顺子:至少五张连号的单牌,最大到2,可以被更大但张数相同的顺子压过; 四带二:四张同号的牌价两张任意牌或两对任意牌; 飞机:飞机分三种,飞机不带翼,飞机带小翼,飞机带大翼。飞机是多个连续数字的三条,最少2连;飞机带小翼,即连续多于一个三带一;飞机带大翼,即连续多于一个三带二。 炸弹:四张相同的牌,可以压过以上所有牌形;可以被更大的炸弹压过。 王炸:大小王同时打出,是最大的炸弹。

6 输入输出格式及样例 输入的第一行包含两个数字n和m; 第二行包含n张牌的牌面,表示你手头有的牌,空格隔开; 第三行包含m张牌的牌面,表示对手打出的牌,空格隔开。 3~2的牌用数字或大写字母表示,小王用 joker(小写)表示,大王用JOKER(大写)表示。输入的牌面不一定按顺序排列。 如果手头的牌能压过对手的牌,请输出最小的组合,将牌面从大到小按顺序输出。如果无法压过对手的牌,输出YAO BU QI。

7 输入输出格式及样例 Input: 16 6 JOKER 2 2 A Q Q Q J J Output: Q Q J J 10 10

8 输入输出格式及样例 Input: 8 2 JOKER 2 2 A Q A A Output: 2 2

9 输入输出格式及样例 Input: 19 4 JOKER joker 2 2 K K K K J Output:

10 练习二

11 猛击提示会发生什么? J Q会弹起来

12 斗地主(全员托管 – 弱智版) 把第一题的程序稍加改动,就可以模拟一个“真实”的牌局了! 这是通往一个完整纸牌游戏的一小步。 尝试对于一个给定的起始牌局,模拟每一轮每个玩家的操作, 及每一个玩家操作之后的手牌。当轮到一个人任意出牌时, 你可以打出任意合法的牌型,但是如有非单张牌型,不允许 打单张。

13 斗地主 洗牌、发牌和抢地主的过程不需要你操心。 我们提供一个程序shuffle_and_deal.cpp,用于“随机”生成初 始的手牌。
运行程序,输入一个unsigned int范围的整数,你就可以得 到从地主开始三个人的初始手牌。 注:输入的数字是“随机种子”,所以每当你输入相同的数字,三个人初始的手牌的分配就是 一样的。

14 斗地主 编译并运行`shuffle_and_deal.cpp`,输入某个数字作为随机种子,程序会输出:
10 A A J 5 Q 2 K A 6 Q 4 3 joker 2 K K Q 5 4 K J 7 8 J 10 3 A Q JOKER 3 J 其中第一行是地主的牌,有20张;第二行和第三行是地主下家和上家的牌,分别有17张。 这三行内容就是你程序的输入。通过使用不同的数字,你可以生成不同的输入测试你的程序。

15 斗地主 你的程序应该模拟三个人打牌的过程,输出每个人每一步的行动和之后手上剩余的牌。 Player 1 plays: 3 3 Player 1 holds: joker 2 2 A A A K K K Q Q J Player 2 plays: 4 4 Player 2 holds: 2 K Q J Player 3 plays: 7 7 Player 3 holds: JOKER 2 A Q J J Player 1 plays: Q Q Player 1 holds: joker 2 2 A A A K K K J Player 2 pass. Player 3 pass. Player 1 plays: 4 4 Player 1 holds: joker 2 2 A A A K K K J Player 2 plays: 5 5 Player 2 holds: 2 K Q J 程序不使用脚本评测,你可以使用你认为更好看的输出格式。 但是请注意不要漏掉要求输出的每一步出牌和剩余手牌。 输出的牌型和手牌请按从大到小的顺序输出。


Download ppt "题目详细要求、参考资料及更新发布于: http://lamda.nju.edu.cn/xiez/bop19/week_3/ 第三周 代码组织与面向对象初探 1 题目详细要求、参考资料及更新发布于: http://lamda.nju.edu.cn/xiez/bop19/week_3/"

Similar presentations


Ads by Google