【问题描述】
牌只有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
#include<iostream>
#include<string>
using namespace std;
int main() {
string a,b,a1;
cin>>a;
int i,j,k,n,t,lenth;
char temp,k1;
n=a.size();
for(i=0; i<n-1; i++) {
for(j=0; j<n-1-i; j++) {
if(a[j]>a[j+1]) {
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
a1=a;//a1为顺子准备
for(i=1; i<a1.size(); i++) {
if(a1[i]==a1[i-1]) {
a1.erase(i,1);
i--;
}
}
while(cin>>b) {
lenth=b.size();
t=1;
k=0;//标记 判断是否需要输出YES
k1=0;//标记 防止输出相同牌
if(lenth<5) {
for(i=0; i<n; i++) {
if(a[i]<=b[0]) continue;
else if(lenth==1) t=1;
else if(a[i]==a[i+1]) t++;
else if(a[i]!=a[i+1]) t=1;
if(t==lenth&&k1!=a[i]) {
if(k==0) {
cout<<"YES";
k=1;
}
cout<<' ';
while(t>0) {
cout<<a[i];
t--;
}
k1=a[i];
t=1;
}
}
if(k==0) cout<<"NO";
cout<<endl;
} else {
for(i=0; i<a1.size(); i++) {
if(a1[i]>b[0]) break;
}
for(;i<a1.size()-1;i++){
if(a1[i+1]==a1[i]+1){
if(t==1) k=i;
t++;
}
else if(t<5) t=1;
}
if(t>=5){
cout<<"YES ";
for(i=0;i<=t-5;i++){
for(j=0;j<5;j++)
cout<<a1[k+j+i];
cout<<' ';
}
cout<<endl;
}
else cout<<"NO\n";
}
}
return 0;
}