扑克牌中随机抽5张,判断是否为顺子,
大小王W可以代替任意数
2~10;A=1;J=11;Q=12;K=13
(难点:针对10的处理)
#include<iostream>
using namespace std;
int main()
{
int b[5] = { 0 }, k = 0;
string a;//因为10没办法用char型输入,只能用字符串
for (int i = 0; i < 5; i++) {//输入五张牌
cin >> a;
//将输入的字符串转换成相应的数字存放在b数组中
if (a[0] >= '2' && a[0] <= '9') b[i] = a[0] - 48;//通过ASCⅡ码值进行转换为整型数字
else if (a[0] == '1' && a[1] == '0') b[i] = 10;
else if (a[0] == 'A') b[i] = 1;
else if (a[0] == 'J') b[i] = 11;
else if (a[0] == 'Q') b[i] = 12;
else if (a[0] == 'K') b[i] = 13;
else if (a[0] == 'W') { k++; b[i] = -i; }//记录W的个数,并使b[i]=-i,是为了避免排序时出现错误判断
//将b数组进行排序
if (i > 0)
for (int j = i; j > 0; j--) {
if (b[j] == b[j - 1]) {//存在相同的数,不是顺子,直接输出结果
cout << "bu shi" << endl;
return 0;//终止程序
}
if (b[j] < b[j - 1]) {//从小到大进行排序
int t = b[j];
b[j] = b[j - 1];
b[j - 1] = t;
}
}
}
//五张牌是顺子则最大的牌会比最小的牌大4,考虑W的存在所以可以小于4
if (b[4] - b[k] <= 4||k == 5)//因为输入W时都为负数,存放在0~k-1的区间,所以k位置为输入的最小字
cout << "shi" << endl;
else
cout << "bu shi" << endl;
return 0;
}
(感觉写的比较繁琐)