华为编程大赛2012

华为编程大赛高级下午4-6点场

纯交流

1、比较两个扑克牌大小,这个很简单就是把A J Q K 大小王 10 对应的字符赋值成数字,然后数字比较就可以

2、干瞪眼。先判断特殊情况,因为输入符合规范,所以
(0)A=B无论什么情况返回平局
(1)A BB /AA B这种情况不满足题意,无法比较
(2)AAA/AA|B AA|A/BBB,也就是一方有炸弹,谁有炸弹谁赢
(3)AA/BB或者A/B,首先A和B谁是2谁大,因为题意AA和BB如果是两位肯定是一样的,不会有AB、BA这种出现,接下来如果A-B绝对值为1就可以做差,根据差判断谁赢
(4)AAA/BBB,直接比较A和B,总之这道题也是给每个扑克赋值比较

3、四川麻将胡牌(包括七对子,无鸣牌)

(1)第一步把输入的牌型转换为tile[3][9]这样的数组,输入的时候做两个标记,type和typecount,先判断type有无,如果无标记true,count+1,最后看看typecount是不是3,如果是3不满足缺一门,无法胡牌
(2)因为输入符合要求,一定是14张牌,如果tile[3][9]中所有牌的数目都是2或者0,满足七对子胡牌要求(非缺一门第一条就失败了),胡了
(3)我以前查过资料,这种判断麻将胡牌没比较好的办法就是消去法,顺序是:
A、消去顺子(123 456)
B、消去刻子(111 222)
C、判断有无雀头(11 22),而且饼子、万字条子里有且只有一对雀头
D、有无单张
因为无杠牌 所以刻子消去一次就变成单张了
考虑到多面待,也就是胡牌情况不止一种,除了正向消去还要反向消去一次,所以在保存原始数组的时候要存两份,所以消去过程大概是这个样子的、
//正向消去
i = 0到2,j=0到7,对于tile中的每一张牌,while(j,j+1,j+2)对应的牌都>0,各消去一次
判断tile中的牌是否有雀头,如果有则标记quetou=true,如果quetou=true再次发现雀头,无法胡牌
判断tile中是否有单张,如果有单张,无法胡牌
//反向消去
i = 0到2,j=8到2,对于tile2中的每一张牌,while(j,j-1,j-2)对应的牌都>0,各消去一次
判断tile2中的牌是否有雀头,如果有则标记quetou=true,如果quetou=true再次发现雀头,无法胡牌
判断tile2中是否有单张,如果有单张,无法胡牌

两种情况中,至少有一种可以消去所有牌且雀头唯一,胡牌,否则不胡牌

扩展考虑(发散一哈?去年是跳棋,今年就麻将游戏吧)
(1)判断是否听牌
(2)判断是否听牌,并提示玩家胡什么
(3)可以鸣牌,也就是考虑碰和杠
(4)其他地区麻将规则。。。
总结
(1) 黑我大JAVA者虽远必诛JAVA明显选的人少,考官都记不得java组的端口号了
(2)JAVA的优越性!晚场C组的头文件定义有问题,按那个写编译不过,但是JAVA组就没这么多屁事,节约5-10分钟时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值