扑克牌顺子的问题:五张牌,A2345是顺子,A2KQJ也是顺子,王可以当作任意牌.
解题思路:排序后最大数字减去最小数字如果小于5则为顺子,如果大于5,则将较小的数字加上13,排序重新用此方法
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> MyData;
vector<int> ::iterator I;
int number = 0;
int ZeroNumber = 0 ; //大小王的个数
cout <<"Enter the data:" << endl;
for ( int i = 0; i < 5; i++ )
{
cin >> number;
MyData.push_back(number);
}
sort(MyData.begin(),MyData.end());
for (I = MyData.begin(); I != MyData.end(); I++)
{
if(*I==0)
{
MyData.erase(I);
I--;
ZeroNumber++;
}
else
break;
}
I= MyData.begin();
number=*I;
I++;
//有重复数字则不是顺子
for ( ;I!=MyData.end();I++)
{
if(*I==number)
{
cout << "不能构成顺子" << endl;
return 1;
}
number = *I;
}
I = MyData.end();
I--;
if (*I-*MyData.begin()<5)
{
cout << "能构成顺子" << endl;
return 1;
}else
{
int temp = 0;
temp = *MyData.begin();
I = MyData.begin();
I++;
int flag = 0;
for( ; I != MyData.end(); I++)
{
if(*I-temp<=ZeroNumber+1)
{
I--;
*I = *I + 13;
I++;
temp = *I;
}else
{
flag = 1;
I--;
*I = *I + 13;
I++;
break;
}
}
sort(MyData.begin(),MyData.end());
I = MyData.end();
I--;
if(*I-*MyData.begin()<5)
{
cout << "能构成顺子" << endl;
return 1;
}
else
{
cout << *I <<"&&" << *MyData.begin() << endl;
cout <<"不能构成顺子" << endl;
return 1;
}
}
}
242

被折叠的 条评论
为什么被折叠?



