扑克牌游戏-华为OJ-C++实现
/*扑克牌游戏大家应该都比較熟悉了。一副牌由54张组成,含3~A、2各4张,小王1张。大王1张。牌面从小到大用例如以下字符和字符串表示(当中。小写joker表示小王,大写JOKER表示大王):
3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER
输入两手牌。两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如:4 4 4 4-joker JOKER。
请比較两手牌大小,输出较大的牌,假设不存在比較关系则输出ERROR。
基本规则:
(1)输入每手牌可能是个子、对子、顺子(连续5张)、三个、炸弹(四个)和对王中的一种,不存在其它情况,由输入保证两手牌都是合法的。顺子已经从小到大排列;
(2)除了炸弹和对王能够和全部牌比較之外,其它类型的牌仅仅能跟同样类型的存在比較关系(如,对子跟对子比較,三个跟三个比較),不考虑拆牌情况(如:将对子拆分成个子);
(3)大小规则跟大家平时了解的常见规则同样,个子、对子、三个比較牌面大小;顺子比較最小牌大小;炸弹大于前面全部的牌。炸弹之间比較牌面大小。对王是最大的牌;
(4)输入的两手牌不会出现相等的情况。
答案提示:
(1)除了炸弹和对王之外,其它必须同类型比較。
(2)输入已经保证合法性。不用检查输入是否是合法的牌。
(3)输入的顺子已经经过从小到大排序,因此不用再排序了。
#include<string>
using namespace std;
int main()
{
char value[13]={'3','4','5','6','7','8','9','10','J','Q','K','A','2'};
string s;
getline(cin,s);
int i,j,k,w;
int type1,type2;// 1 个 2 对 3:三个 4:炸弹 5:顺子 6:个王 7:对王
for(i=0;i<s.size();i++) //计算输入的 两副牌的类型
{
if(s[i]=='-')
{
if(i==1)
type1=1;
else if(s[1]!=' ') //s[1]不等于空格就是王
{
if(i==11)
type1=7; //这样的情况样例:joker JOKER-1 2 3 4 5
else
type1=6;
}
else if(i==3)
type1=2;
else if(i==5)
type1=3;
else if(i==7)
type1=4;
else
type1=5;
break;
}
}
j=i;
if(s.size()==j+2)
type2=1;
else if(s[j+2]!=' ') //s[1]不等于空格就是王
{
if(s.size()-j-1==11)
type2=7; //这样的情况样例:1 2 3 4 5-joker JOKER
else
type2=6;
}
else if(s.size()-j-1==3)
type2=2;
else if(s.size()-j-1==5)
type2=3;
else if(s.size()-j-1==7)
type2=4;
else
type2=5;
if(type1==type2) //假设类型同样
{
if(type1==6 && type2==6)
if(s[0]=='J')
for(w=0;w<j;w++)
cout<<s[w];
else
for(w=j+1;w<s.size();w++)
cout<<s[w];
else
{
for(i=0;i<13;i++) //通过索引表 比較两副牌第一张牌的大小
if(s[0]==value[i])
break;
for(k=0;k<13;k++)
if(s[j+1]==value[k])
break;
if(i>k)
for(w=0;w<j;w++)
cout<<s[w];
else
for(w=j+1;w<s.size();w++)
cout<<s[w];
}
}
else
{
if(type1==6) //单张牌假设是王 单独处理
for(w=0;w<j;w++)
cout<<s[w];
else if(type2==6)
for(w=j+1;w<s.size();w++)
cout<<s[w];
else if(type1==4)
{
if(type2==7)
for(w=j+1;w<s.size();w++)
cout<<s[w];
else
for(w=0;w<j;w++)
cout<<s[w];
}
else if(type1==7)
{
for(w=0;w<j;w++)
cout<<s[w];
}
else if(type2==4 || type2==7)
for(w=j+1;w<s.size();w++)
cout<<s[w];
else
cout<<"ERROR";
}
cout<<endl;
// cout<<type1<<" "<<type2<<endl;
return 0;
}
/*///////////////////////////測试用例/////////
A 2 3 4 5-2 3 4 5 6
5-8 8
5 5 5-8 8 8
4 4 4 4-5 5 5 5
A A A A-2 2 2 2
8-2
8-8 8 8 8
8 8 8 8-joker JOKER
9-joker JOKER
9-joker
joker-JOKER
4 4 4 4-joker JOKER
joker JOKER-A 2 3 4 5
*/
扑克牌游戏-华为OJ-C++实现的更多相关文章
- 华为OJ题目:扑克牌大小
题目描述: 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A.2各4张,小王1张,大王1张.牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):3 ...
- JAVA collection集合之 扑克牌游戏
主要内容:这里使用collection集合,模拟香港电影中大佬们玩的扑克牌游戏. 1.游戏规则:两个玩家每人手中发两张牌,进行比较.比较每个玩家手中牌最大的点数,大小由A-2,点数大者获胜.如果点数相 ...
- 华为OJ:火车进站
火车进站 给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号.要求以字典序排序输出火车出站的序列号. 输入描述: 有多组测试用例, ...
- 在华为oj的两个月
一次偶然的机会,我接触到华为oj平台(http://career-oj.huawei.com/exam/camLogin.jsp),当时的心情很是兴奋,于是立马注册开通,然后迫不及待地上去做题.刚开始 ...
- 【Nodejs】“快算24”扑克牌游戏算法 1.02
快算24是一种挺好的锻炼孩子算数能力的扑克牌游戏,它的游戏方式是把四张牌的牌面数值通过有限四则运算得到结果24,四张牌必须仅用一次.各地玩法还有点差别,有的只算1-10,其它抽出来:有的地方把整幅牌都 ...
- 【Nodejs】“快算24”扑克牌游戏算法
算24是一款扑克牌游戏,它的游戏方式是把四张牌的牌面数值通过四则运算得到结果24,四张牌必须仅用一次.这是一种挺好的锻炼孩子算数能力的扑克牌游戏. 各地玩法还有点差别,有的只算1-10,其它抽出来:有 ...
- 测开之路四十九:用Django实现扑克牌游戏
用Django实现和之前flask一样的扑克牌游戏 项目结构 html <!DOCTYPE html><html lang="en"><head> ...
- python实例:解决经典扑克牌游戏 -- 四张牌凑24点 (二)
Hey! 如果你还没有看这篇的上文的话,可以去稍稍瞅一眼,会帮助加速理解这一篇里面涉及到的递归结构哦!(上一篇点这里:<python实例:解决经典扑克牌游戏 -- 四张牌凑24点 (一)> ...
- 华为OJ平台——24点游戏
题目描述: 给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利 输入: 4个1-10的数字.[数字允许重复,测试用例保证无异常数字]输出: true or false 思路:
随机推荐
- checkbox在vue中的用法总结
前言 关于checkbox多选框是再常见不过的了,几乎很多地方都会用到,这两天在使用vue框架时需要用到checkbox多选功能,实在着实让我头疼,vue和原生checkbox用法不太一样, 之前对于 ...
- 关于EF实体类的一点思考
在EF中修改一条记录时,一般是先查出该条记录,然后再通过TryUpdateModel或其他方式更新对应的属性.但我很讨厌这种要更新一条记录时,还要先去把记录查询出来的做法.我喜欢像sql语句那样的直接 ...
- soapui 自动化教程
本教程主要讲述对接口的自动化测试,略过压力测试.安全测试. 最终目标是通过groovy脚本执行一个文件,发送多个任务请求.验证返回值是否符合期望. 教程从soapui入门到groovy实现回传参数.生 ...
- centos7使用yum安装mysql 【转】
转自:http://blog.csdn.net/eclothy/article/details/52733891 使用: yum install mariadb* (注意,带星号) 安装好后,启 ...
- Effective Java通俗理解(上)
这篇博客是Java经典书籍<Effective Java(第二版)>的读书笔记,此书共有78条关于编写高质量Java代码的建议,我会试着逐一对其进行更为通俗易懂地讲解,故此篇博客的更新大约 ...
- cookie、localStorage、sessionStorage的区别
localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 共同点:sessionStorage.localStorage和cooki ...
- JS如何判断一个数组是否为空、是否含有某个值
一.js判断数组是否为空 方法一: arr.length let arr = []; if (arr.length == 0){ console.log("数组为空") }els ...
- react的生命周期需要知道的。
有关React生命周期: 1.组件生命周期的执行次数是什么样子的??? 只执行一次: constructor.componentWillMount.componentDidMount 执行多次:ren ...
- sqlserver每行都有累加,你怎么搞,窗口函数来帮忙!!!
在统计中我们经常会面临复杂的查询,例如累加,最近也遇到一个很好的例子,今天我们一起来看看: 有一个关于销售数据的视图,字段有:emptyid(员工编号),ordermonth( ...
- Android 获取网络类型
获取网络类型 public class IntenetUtil { //没有网络连接 public static final int NETWORN_NONE = 0; //wifi连接 public ...