天才麻将少女(15分)
【问题描述】
最近看到一个动漫,叫天才麻将少女,没看过?没关系,就是一些漂亮的少女打麻将,打麻将自然是要胡牌的,其中有个很厉害的胡牌方式叫做国士无双,就是手里的十三张牌为“东南西北中白发一万九万一饼九饼一条九条”那么此时任意一张手中有的牌都能胡牌。当然,题目并没有那么难,你只要判断给出的手牌符不符合国士无双的牌型就好了。
【要求】
【数据输入】
第一行输入一个数T,代表测试数据组数,其中T<=5
接下来T行每行一个字符串
每个字符串由十三个不含空格的小字符串构成,每两个小字符串之间用空格分隔
a1a9各代表一万到九万b9各代表一饼到九饼
b1
c1c9各代表一条到九条d7代表顺序依次为“东南西北中白发
d1
【数据输出】
对于每组测试数据输出一行Yes 或者No.
yes表示是国士无双,no表示不是国士无双。
【样例输入】
2
al a2 a3 a4 a5 a6 a7 a8 a9 d1 d2 d3 d4
a1 d1 b9 c1 a9 d2 d4 d7 d6 d5 b1 c9 d3
【样例输出】
No
Yes
#include <stdio.h>
#include <string.h>
int main()
{
char buf[40]={0};
char arr[13][4] ={0};//记录牌
char pai[][4]={"a1", "d1", "b9", "c1", "a9", "d2", "d4", "d7", "d6", "d5", "b1", "c9", "d3"};
int i = 0,j=0,n=0;
int flag = 0;
gets(buf); //读取一行
//分割字符串
while(1)
{
if(buf[i] == 0)
{
n++;
break;
}
if(buf[i] != ' ')
{
arr[n][j] = buf[i];
j++;
if(j == 2)
{
j = 0;
n++;
}
}
i++;
}
if(n != 13)
printf("No");
else
{
for (i = 0;i<13;i++)
{
for(j=0;j<13;j++)
{
if(strcmp(arr[i],pai[j])!=0)
{
printf("No");
return 0;
}
}
}
printf("Yes");
}
return 0;
}