题目描述:
牌只有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。
样例输入:1223344556667733样例输出:YES
代码如下:
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <cstring>
using namespace std;
int SortSequence(char a[],int b[])
{
int i,j,n=strlen(a);
char temp;
int counter=1;
for(i=0;i<n-1;i++)
{
if(a[i]!=a[i+1]) {b[(int)a[i]-49]=counter;counter=1;}
else counter++;//前后数不一样是,temp++,表示排序增加
}
if(a[n-2]==a[n-1]) b[(int)a[n-1]-49]+=2;
else b[(int)a[n-1]-49]=1;
if(counter!=1) b[(int)a[n-1]-49]=counter;
return 0;
}
int main()
{
int i;
int temp[9]={0};
int hh=0;
char a[1001];
while(cin>>a)
{
cout<<a<<endl;
char b[1001];cin>>b;
cout<<b<<endl;
memset(temp,0,sizeof(temp));
SortSequence(a,temp);
int len=strlen(b);
int c[5]={0};
if(temp[0]&&temp[1]&&temp[2]&&temp[3]&&temp[4]) c[0]=1;
if(temp[1]&&temp[2]&&temp[3]&&temp[4]&&temp[5]) c[1]=1;
if(temp[2]&&temp[3]&&temp[4]&&temp[5]&&temp[6]) c[2]=1;
if(temp[3]&&temp[4]&&temp[5]&&temp[6]&&temp[7]) c[3]=1;
if(temp[4]&&temp[5]&&temp[6]&&temp[7]&&temp[8]) c[4]=1;
if(len==5)
{
if(b[0]=='1'&&(c[1]||c[2]||c[3]||c[4])) {cout<<"YES"<<endl;continue; }
if(b[0]=='2'&&(c[2]||c[3]||c[4])) {cout<<"YES"<<endl;continue; }
if(b[0]=='3'&&(c[3]||c[4])) {cout<<"YES"<<endl;continue; }
if(b[0]=='4'&&(c[4])) {cout<<"YES"<<endl;continue; }
}
else{
for(i=0;i<9;i++)
if((int)b[0]-48<i+1&&temp[i]>=len) {cout<<"YES"<<endl;hh=1;break; }
}
if(hh==1) continue;
cout<<"NO"<<endl;
}
return 0;
}
求救啊同志们,OJ上提交之后一个例子都过不了,求解啊!!!我自己实验的时候没错啊!
牌只有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。
样例输入:1223344556667733样例输出:YES
代码如下:
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <cstring>
using namespace std;
int SortSequence(char a[],int b[])
{
int i,j,n=strlen(a);
char temp;
int counter=1;
for(i=0;i<n-1;i++)
{
if(a[i]!=a[i+1]) {b[(int)a[i]-49]=counter;counter=1;}
else counter++;//前后数不一样是,temp++,表示排序增加
}
if(a[n-2]==a[n-1]) b[(int)a[n-1]-49]+=2;
else b[(int)a[n-1]-49]=1;
if(counter!=1) b[(int)a[n-1]-49]=counter;
return 0;
}
int main()
{
int i;
int temp[9]={0};
int hh=0;
char a[1001];
while(cin>>a)
{
cout<<a<<endl;
char b[1001];cin>>b;
cout<<b<<endl;
memset(temp,0,sizeof(temp));
SortSequence(a,temp);
int len=strlen(b);
int c[5]={0};
if(temp[0]&&temp[1]&&temp[2]&&temp[3]&&temp[4]) c[0]=1;
if(temp[1]&&temp[2]&&temp[3]&&temp[4]&&temp[5]) c[1]=1;
if(temp[2]&&temp[3]&&temp[4]&&temp[5]&&temp[6]) c[2]=1;
if(temp[3]&&temp[4]&&temp[5]&&temp[6]&&temp[7]) c[3]=1;
if(temp[4]&&temp[5]&&temp[6]&&temp[7]&&temp[8]) c[4]=1;
if(len==5)
{
if(b[0]=='1'&&(c[1]||c[2]||c[3]||c[4])) {cout<<"YES"<<endl;continue; }
if(b[0]=='2'&&(c[2]||c[3]||c[4])) {cout<<"YES"<<endl;continue; }
if(b[0]=='3'&&(c[3]||c[4])) {cout<<"YES"<<endl;continue; }
if(b[0]=='4'&&(c[4])) {cout<<"YES"<<endl;continue; }
}
else{
for(i=0;i<9;i++)
if((int)b[0]-48<i+1&&temp[i]>=len) {cout<<"YES"<<endl;hh=1;break; }
}
if(hh==1) continue;
cout<<"NO"<<endl;
}
return 0;
}
求救啊同志们,OJ上提交之后一个例子都过不了,求解啊!!!我自己实验的时候没错啊!