题目描述
牌只有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五个,后面的比前面的均大。
输入描述:
输入有多组数据。
每组输入两个字符串(字符串大小不超过100)a,b。a字符串代表手中牌,b字符串代表处的牌。
输出描述:
压过输出YES 否则NO。
示例1
输入
12233445566677
33
输出
YES
分析
按照规则,分为两种况:一种是顺子,一种就是重复。
- 顺子时候。先将a串去重复。然后再初步判断第一张牌是否大于,大于时,再比较后四张牌。
- 重复。判断第一张牌是否大于,大于时,再比较b.length()长度的牌。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| #include <iostream> #include <vector> #include <queue> using namespace std;
int main() { string a, b, c; bool flags = false; cin>>a>>b; if(b.length()<5&&b.length()>0) { for(int i = 0; i < a.length()-b.length()+1;i ++){ if(a[i]>b[0]){ for(int j = i; j <= i+b.length()-1; j ++){ if(a[j]>b[0]&&a[j]==a[i]){ flags = true; }else { flags = false; break; } } if(flags) break; } } }else{ for(int i = 1;i < a.length(); i ++){ if(a[i]==a[i-1]){ a.erase(i,1); i--; } } for(int i = 0; i < a.length(); i ++){ if(a[i]>b[0]){ for(int j = 1; j < b.length(); j ++){ if(a[i+j]>b[j]&&a[i+j]-a[i+j-1]==1){ flags = true; } else { flags = false; break; } } } if(flags) break; } } if(flags) cout<<"YES"; else cout<<"NO"; return 0; }
|