华为od题库 斗地主之顺子

题目描述:

  • 在斗地主扑克牌游戏中, 扑克牌由小到大的顺序为:3,4,5,6,7,8,9,10,J,Q,K,A,2,
  • 玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等。
  • 其中顺子的出牌规则为:由 至少 5 张由小到大连续递增 的扑克牌组成,且 不能包含 2 。
  • 例如:{3,4,5,6,7}、{3,4,5,6,7,8,9,10,J,Q,K,A}都是有效的顺子;
  • 而{J,Q,K,A,2}、 {2,3,4,5,6}、{3,4,5,6}、{3,4,5,6,8}等都不是顺子。
  • 给定一个包含13张牌的数组,如果有满足出牌规则的顺子,请输出顺子。
  • 如果存在多个顺子,请每行输出一个顺子,且需要按顺子的 第一张牌的大小(必须从小到大) 依次输出。
  • 如果没有满足出牌规则的顺子,请 输出 No 。

在斗地主扑克牌游戏中, 扑克牌由小到大的顺序为:3,4,5,6,7,8,9,10,J,Q,K,A,2,

玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等。

其中顺子的出牌规则为:由 至少 5 张由小到大连续递增 的扑克牌组成,且 不能包含 2 。

例如:{3,4,5,6,7}、{3,4,5,6,7,8,9,10,J,Q,K,A}都是有效的顺子;

而{J,Q,K,A,2}、 {2,3,4,5,6}、{3,4,5,6}、{3,4,5,6,8}等都不是顺子。

给定一个包含13张牌的数组,如果有满足出牌规则的顺子,请输出顺子。

如果存在多个顺子,请每行输出一个顺子,且需要按顺子的 第一张牌的大小(必须从小到大) 依次输出。

如果没有满足出牌规则的顺子,请 输出 No 。

//主要思想:将字符转化为对应整数方便排序,利用哈希表存储每一种牌的个数,搜索顺子过程中只要在哈希表种找连续的不为0的数组下标即可,满足大于等于五即可输出。
//菜鸡新人求斧正
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>

using namespace std;
// 数变字符 
string num_to_card(int a)
{
	if(a>=3&&a<=10) return to_string(a);
	else if(a==11)  return "J";
	else if(a==12)  return "Q";
	else if(a==13)  return "K";
	else if(a==14)  return "A";
	else if(a==15)  return "2";	
}
int main()
{
   vector<string> a(13);
   vector<int> num(13);
   int  hash[16]={0}; //初始化哈希表 
   for(int i=0;i<13;i++) //处理输入 将字符变成数存入num数组 
   {
   	cin>>a[i];
   	if(a[i]=="J") num[i]=11;
   	else if(a[i]=="Q") num[i]=12;
   	else if(a[i]=="K") num[i]=13;
   	else if(a[i]=="A") num[i]=14;
   	else if(a[i]=="2") num[i]=15;
   	else if(a[i]=="10") num[i]=10;
    else if(a[i]>="3"&&a[i]<="9") num[i]=a[i][0]-'3'+3;
   }   
   sort(num.begin(),num.end());      //排序 
   for(int x:num) hash[x]++;         //用哈希表计数每种牌的个数 
   int l=3,r,count1=0;              //双指针遍历hash
   while(r<15)
   {
   	while(hash[l]==0) l++;
   	r=l;   	
   	while(hash[r]&&r<15) r++;  	   	  //r不能越界
   	if(r-l>=5) 
   	{
   		count1++;
   	   for(int i=l;i<r;i++)           //检测到符合条件的顺子就输出
		  {
		  	cout<<num_to_card(i)<<' ';
		  	hash[i]--;
		  }	
		  cout<<endl;
		  continue;                      //输出后从l检测,避免重复情况,比如两队相同顺子
	}
	l=r;	                        //没有满足的顺子就更新l指针(挺像快慢指针的)
   }
   if(!count1) cout<<"no"<<endl;     //检测完后如果没有输出就说明没有顺子
} 

#od机试题库#
全部评论

相关推荐

评论
1
7
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4274次浏览 75人参与
# AI面会问哪些问题? #
27625次浏览 552人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15160次浏览 221人参与
# 你的实习产出是真实的还是包装的? #
20103次浏览 342人参与
# 找AI工作可以去哪些公司? #
9011次浏览 233人参与
# 春招至今,你的战绩如何? #
64714次浏览 578人参与
# 米连集团26产品管培生项目 #
13324次浏览 285人参与
# 从事AI岗需要掌握哪些技术栈? #
8860次浏览 302人参与
# 你做过最难的笔试是哪家公司 #
33267次浏览 231人参与
# 中国电信笔试 #
31977次浏览 292人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
340747次浏览 2174人参与
# 哪些公司真双非友好? #
69570次浏览 289人参与
# 阿里笔试 #
178475次浏览 1315人参与
# 机械人避雷的岗位/公司 #
62698次浏览 393人参与
# 第一份工作一定要去大厂吗 #
14491次浏览 122人参与
# 金三银四,你的春招进行到哪个阶段了? #
22065次浏览 280人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26245次浏览 310人参与
# 沪漂/北漂你觉得哪个更苦? #
9797次浏览 193人参与
# HR最不可信的一句话是__ #
6195次浏览 113人参与
# 应届生第一份工资要多少合适 #
20674次浏览 86人参与
# AI时代,哪个岗位还有“活路” #
11470次浏览 341人参与
# 春招你拿到offer了吗 #
831151次浏览 9986人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务