【问题描述】
牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌。
规则:出牌牌型有5种
[1]一张 如4 则5…9可压过
[2]两张 如44 则55,66,77,…,99可压过
[3]三张 如444 规则如[2]
[4]四张 如4444 规则如[2]
[5]五张 牌型只有12345 23456 34567 45678 56789五个,后面的比前面的均大。
【输入形式】
输入有多行,第一行代表手中的牌,长度不超过200个数字。接下来的每一行代表每次对方出的牌。
【输出形式】
输出有多行,代表手中的牌是否能压过对方出的牌,压过输出YES, 并列出所有可选项,可选项之间用空格分隔。 否则输出NO。
【样例输入】
17624234556367 33 222 34567
【样例输出】
YES 44 55 66 77 YES 666 NO
【AC代码】
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string shou;
int main()
{
cin>>shou;
sort(shou.begin(),shou.end());
int len_shou=shou.length();
set<char> t;//用set去重 待会用于找顺子
for(int i=0;i<len_shou;i++){
t.insert(shou[i]);
}
string b;
while(cin>>b){
int len=b.length();
if(len==1){
set<char> ans;//需要去重,可以想到使用set
for(int i=0;i<len_shou;i++){
if(shou[i]>b[0]){
ans.insert(shou[i]);
}
}
if(ans.size()){
cout<<"YES ";
for(set<char>::iterator it=ans.begin();it!=ans.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
else{
cout<<"NO"<<endl;
}
}
else if(len==2){
set<char> ans;//需要去重,可以想到使用set
for(int i=0;i<len_shou-1;i++){
if(shou[i]>b[0]&&shou[i+1]==shou[i]){
ans.insert(shou[i]);
}
}
if(ans.size()){
cout<<"YES ";
for(set<char>::iterator it=ans.begin();it!=ans.end();it++){
cout<<*it<<*it<<" ";
}
cout<<endl;
}
else{
cout<<"NO"<<endl;
}
}
else if(len==3){
set<char> ans;//需要去重,可以想到使用set
for(int i=0;i<len_shou-2;i++){
if(shou[i]>b[0]&&shou[i+1]==shou[i]&&shou[i+2]==shou[i]){
ans.insert(shou[i]);
}
}
if(ans.size()){
cout<<"YES ";
for(set<char>::iterator it=ans.begin();it!=ans.end();it++){
cout<<*it<<*it<<*it<<" ";
}
cout<<endl;
}
else{
cout<<"NO"<<endl;
}
}
else if(len==4){
set<char> ans;//需要去重,可以想到使用set
for(int i=0;i<len_shou-3;i++){
if(shou[i]>b[0]&&shou[i+1]==shou[i]&&shou[i+2]==shou[i]&&shou[i+3]==shou[i]){
ans.insert(shou[i]);
}
}
if(ans.size()){
cout<<"YES ";
for(set<char>::iterator it=ans.begin();it!=ans.end();it++){
cout<<*it<<*it<<*it<<*it<<" ";
}
cout<<endl;
}
else{
cout<<"NO"<<endl;
}
}
else if(len==5){
set<char> ans;//需要去重,可以想到使用set
//这一段写得属实难看 不太熟悉STL的容器指针的操作
for(set<char>::iterator it=t.begin();it!=t.end();it++){
if(*it>b[0]){
set<char>::iterator ip=it;
ip++,ip++,ip++,ip++;
if(*ip==*it+4) ans.insert(*it);
}
}
if(ans.size()){
cout<<"YES ";
for(set<char>::iterator it=ans.begin();it!=ans.end();it++){
cout<<char(*it)<<char(*it+1)<<char(*it+2)<<char(*it+3)<<char(*it+4)<<" ";
}
cout<<endl;
}
else{
cout<<"NO"<<endl;
}
}
}
return 0;
}