您的位置:首页 > 职场人生

剑指offer——面试题44:扑克牌的顺序

2015-09-07 19:10 417 查看
题目:

从扑克牌中随机抽取5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而

大,小王可以看成任意数字

思路:

先进行排序,接着判断大小王(0)的个数,接着

遍历剩下的,若是遇到后一个比前一个隔3以及3以上就不用考虑了

若是只隔1个,继续遍历

若是隔2个或3个,就看那个0的个数,填一个就减一。

#include<iostream>
#include<vector>
using namespace std;

bool ifconsistent(vector<int>& vec)
{
for(int k=0;k<vec.size()-1;k++)//进行排序
{
for(int j=k;j<vec.size();j++)
if(vec[k]>vec[j])
{
int temp=vec[k];
vec[k]=vec[j];
vec[j]=temp;
}
}

int num_wang=0;//计算王的个数
int i=0;
if(vec[0]==0)
{
num_wang++;
i++;
if(vec[1]==0)
{num_wang++;i++;}
}

int last=vec[i];
i++;
while(i<5)
{
int times=vec[i]-last;
if(times==0)
return 0;
if(times==1)//若是只相隔1的话直接往下走
{
last=vec[i];
i++;
}
else if(times>3)//若是相隔超过了两个数字,那么就一一定不行
return 0;
else //相隔一个或者两个数字时,要用王来替代。这个时候要确定下王的个数。
{
if(num_wang<(times-1))
return 0;
else
{
if(times==2)
num_wang--;
if(times==3)
num_wang-=2;
last=vec[i];
i++;
}
}
}
return 1;
}

int main()
{
int ary[5]={0,1,3,4,5};
vector<int> vec(ary,ary+5);
cout<<ifconsistent(vec)<<endl;
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: