华为机试——扑克牌
一副牌中发五张扑克牌给你,让你判断数字的组成:
有一下几种情况:
1.四条:即四章一样数值的牌(牌均不论花色)
2.三条带一对
3.三条带两张不同数值的牌
4.两对
5.顺子 包括10,J,Q,K,A
6.什么都不是
7.只有一对。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string str;
cin>>str;
int flag;
int num[5],m=0;
for(int i=0;i<str.size()&&m<5;i++)
{
if(str[i]>='2' && str[i]<='9')
num[m++]=str[i]-'0';
else if(str[i]=='1'&& str[i+1]=='0')
{
num[m++]=10;
i++;
}
else if(str[i]=='J' ||str[i]=='j')
num[m++]=11;
else if(str[i]=='Q'||str[i]=='q')
num[m++]=12;
else if(str[i]=='K' || str[i]=='k')
num[m++]=13;
else if(str[i]=='A' || str[i] =='a')
num[m++]=14;
else
{
cout<<"输入错误"<<endl;
return 0;
}
}
sort(num,num+5);
if(num[0]==num[3] || num[1]==num[4])
flag=1;
else if((num[0]==num[2] && num[3]==num[4])||(num[2]==num[4] &&num[0]==num[1]))
flag=2;
else if((num[0]==num[2] && num[3]!=num[4])||(num[1]==num[3] && num[0]!=num[4])||(num[2]==num[4] && num[0]!=num[1]))
flag=3;
else if((num[0]==num[1] && num[3]==num[4])||(num[0]==num[1] && num[2]==num[3])||(num[1] ==num[2] && num[3]==num[4]))
flag=4;
else if(num[0]-num[4]==4)
flag=5;
else if(num[0]==num[1] ||num[1]==num[2] ||num[3]==num[4] ||num[3]==num[4])
flag=7;
else
flag=6;
cout<<flag<<endl;
}