天才麻将少女--国士无双。

天才麻将少女(15分)
【问题描述】
最近看到一个动漫,叫天才麻将少女,没看过?没关系,就是一些漂亮的少女打麻将,打麻将自然是要胡牌的,其中有个很厉害的胡牌方式叫做国士无双,就是手里的十三张牌为“东南西北中白发一万九万一饼九饼一条九条”那么此时任意一张手中有的牌都能胡牌。当然,题目并没有那么难,你只要判断给出的手牌符不符合国士无双的牌型就好了。
【要求】
【数据输入】
第一行输入一个数T,代表测试数据组数,其中T<=5
接下来T行每行一个字符串
每个字符串由十三个不含空格的小字符串构成,每两个小字符串之间用空格分隔
a1a9各代表一万到九万
b1
b9各代表一饼到九饼
c1c9各代表一条到九条
d1
d7代表顺序依次为“东南西北中白发
【数据输出】
对于每组测试数据输出一行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;
}