sdutoj 1101 Bridge Hands (桥牌)

题目链接: 1101  Bridge Hands (桥牌)

/*
*【题目描述】
* 四个人玩桥牌游戏,有52张扑克牌。
* 四个玩家分别是按照方位来起名字的,即N、E、S、W
* 摸牌顺序是顺时针
* 牌有四个花色,级别有小到大分别是:梅花(CLUBS)<方块(DIAMONDS)<黑桃(SPADES)<红桃(HEARTS)
* 还有每张牌有一个点数,分别是:2、3、4、5、6、7、8、9、T、J、Q、K、A
* 题目的意思是,给你一个摸牌的顺序,等四人摸完牌,让你按照花色和点数排序,然后输出结果。
*
*【题目的输入】
* 题目有多组数据的,输入有三行,第一行是一个字符,代表一个玩家的名字,
* 让这个玩家的下家开始摸牌,然后依次按顺时针的顺序摸牌。
* 第二行和第三行是扑克牌的初始顺序,每张牌是由2个字符组成,第一个字符是花色,第二个是点数
* 当输入#时全程序结束。
*
*【题目的输出】
* 让你按S、W、N、E的玩家顺序,输出每个玩家手中的排好顺序的牌。
*
*【思路】
* 就是一道模拟题,按部就班的做就行了。
* 1、判断出摸牌顺序;
* 2、排序是花色优先,点数是次要的。
*    那么就把花色的数值设置为梅花20、方块40、黑桃60、红桃80
*    点数按本身的数值算2就是2,3就是3,T就是10,J就是11等等
* 3、输出
*
*/

#include <stdio.h>
#include <string.h>

#define ZIFU 53
#define SIZE 27
#define BIAOJI 14

int main()
{
    char player;      //这人玩家的下家第一个抓牌
    char ch;          //扑克牌

    char S[SIZE];      //南方玩家扑克牌序列
    int sFlag[2][BIAOJI];   //标记数组,下面同理

    char W[SIZE];
    int wFlag[2][BIAOJI];

    char N[SIZE];
    int nFlag[2][BIAOJI];

    char E[SIZE];
    int eFlag[2][BIAOJI];

    int i, j, k, l, m, n;

    while (scanf("%c", &player))
    {
        scanf("%*c");  //吸收回车
        if (player == '#') //程序结束
        {
            break;
        }

        memset(eFlag, 0, sizeof(eFlag));  //初始化
        memset(sFlag, 0, sizeof(sFlag));
        memset(wFlag, 0, sizeof(wFlag));
        memset(nFlag, 0, sizeof(nFlag));
        switch (player)  //判断摸牌顺序
        {
            case 'N':
                 nFlag[0][0] = 0;
                 eFlag[0][0] = 1;
                 sFlag[0][0] = 2;
                 wFlag[0][0] = 3;

                 break;

            case 'E':
                 nFlag[0][0] = 3;
                 eFlag[0][0] = 0;
                 sFlag[0][0] = 1;
                 wFlag[0][0] = 2;
                 break;

            case 'S':
                 nFlag[0][0] = 2;
                 eFlag[0][0] = 3;
                 sFlag[0][0] = 0;
                 wFlag[0][0] = 1;
                 break;
            case 'W':
                 nFlag[0][0] = 1;
                 eFlag[0][0] = 2;
                 sFlag[0][0] = 3;
                 wFlag[0][0] = 0;
                 break;

            default : break;
        }

        j = k = l = m = 1;  //初始化
        for (i=1; i<ZIFU*2-1; i++)  //输入扑克牌
        {
            scanf("%c", &ch);
            if (i == 52)
            {
                scanf("%*c");  //吸收第一行结束时的回车
            }

            switch (i%8)  //四个人每摸完一次,共8个字符
            {
                case 1:
                     if (eFlag[0][0] == 1)
                     {
                         E[j++] = ch;
                     }
                     else if (sFlag[0][0] == 1)
                     {
                         S[k++] = ch;
                     }
                     else if (wFlag[0][0] == 1)
                     {
                         W[l++] = ch;
                     }
                     else
                     {
                         N[m++] = ch;
                     }
                     break;
                case 2:
                     if (eFlag[0][0] == 1)
                     {
                         E[j++] = ch;
                     }
                     else if (sFlag[0][0] == 1)
                     {
                         S[k++] = ch;
                     }
                     else if (wFlag[0][0] == 1)
                     {
                         W[l++] = ch;
                     }
                     else
                     {
                         N[m++] = ch;
                     }
                     break;

                case 3:
                     if (eFlag[0][0] == 2)
                     {
                         E[j++] = ch;
                     }
                     else if (sFlag[0][0] == 2)
                     {
                         S[k++] = ch;
                     }
                     else if (wFlag[0][0] == 2)
                     {
                         W[l++] = ch;
                     }
                     else
                     {
                         N[m++] = ch;
                     }
                     break;
                case 4:
                     if (eFlag[0][0] == 2)
                     {
                         E[j++] = ch;
                     }
                     else if (sFlag[0][0] == 2)
                     {
                         S[k++] = ch;
                     }
                     else if (wFlag[0][0] == 2)
                     {
                         W[l++] = ch;
                     }
                     else
                     {
                         N[m++] = ch;
                     }
                     break;

                case 5:
                     if (eFlag[0][0] == 3)
                     {
                         E[j++] = ch;
                     }
                     else if (sFlag[0][0] == 3)
                     {
                         S[k++] = ch;
                     }
                     else if (wFlag[0][0] == 3)
                     {
                         W[l++] = ch;
                     }
                     else
                     {
                         N[m++] = ch;
                     }
                     break;
                case 6:
                     if (eFlag[0][0] == 3)
                     {
                         E[j++] = ch;
                     }
                     else if (sFlag[0][0] == 3)
                     {
                         S[k++] = ch;
                     }
                     else if (wFlag[0][0] == 3)
                     {
                         W[l++] = ch;
                     }
                     else
                     {
                         N[m++] = ch;
                     }
                     break;

                case 7:
                     if (eFlag[0][0] == 0)
                     {
                         E[j++] = ch;
                     }
                     else if (sFlag[0][0] == 0)
                     {
                         S[k++] = ch;
                     }
                     else if (wFlag[0][0] == 0)
                     {
                         W[l++] = ch;
                     }
                     else
                     {
                         N[m++] = ch;
                     }
                     break;
                case 0:
                     if (eFlag[0][0] == 0)
                     {
                         E[j++] = ch;
                     }
                     else if (sFlag[0][0] == 0)
                     {
                         S[k++] = ch;
                     }
                     else if (wFlag[0][0] == 0)
                     {
                         W[l++] = ch;
                     }
                     else
                     {
                         N[m++] = ch;
                     }
                     break;

                default : break;
            }
        }

        k=1;
        for (i=1, j=2; i<SIZE; i+=2, j+=2)  //把字符转换成数值,进行排序
        {
            switch (E[i])
            {
                case 'C':
                     eFlag[0][k] += 20;
                     break;
                case 'D':
                     eFlag[0][k] += 40;
                     break;
                case 'S':
                     eFlag[0][k] += 60;
                     break;
                case 'H':
                     eFlag[0][k] += 80;
                     break;
                default : break;
            }

            switch (E[j])
            {
                case '2':
                     eFlag[0][k] += 2;
                     break;
                case '3':
                     eFlag[0][k] += 3;
                     break;
                case '4':
                     eFlag[0][k] += 4;
                     break;
                case '5':
                     eFlag[0][k] += 5;
                     break;
                case '6':
                     eFlag[0][k] += 6;
                     break;
                case '7':
                     eFlag[0][k] += 7;
                     break;
                case '8':
                     eFlag[0][k] += 8;
                     break;
                case '9':
                     eFlag[0][k] += 9;
                     break;
                case 'T':
                     eFlag[0][k] += 10;
                     break;
                case 'J':
                     eFlag[0][k] += 11;
                     break;
                case 'Q':
                     eFlag[0][k] += 12;
                     break;
                case 'K':
                     eFlag[0][k] += 13;
                     break;
                case 'A':
                     eFlag[0][k] += 14;
                     break;
                default : break;
            }

            eFlag[1][k] = k;
            k++;
        }

        k=1;
        for (i=1, j=2; i<SIZE; i+=2, j+=2)
        {
            switch (S[i])
            {
                case 'C':
                     sFlag[0][k] += 20;
                     break;
                case 'D':
                     sFlag[0][k] += 40;
                     break;
                case 'S':
                     sFlag[0][k] += 60;
                     break;
                case 'H':
                     sFlag[0][k] += 80;
                     break;
                default : break;
            }

            switch (S[j])
            {
                case '2':
                     sFlag[0][k] += 2;
                     break;
                case '3':
                     sFlag[0][k] += 3;
                     break;
                case '4':
                     sFlag[0][k] += 4;
                     break;
                case '5':
                     sFlag[0][k] += 5;
                     break;
                case '6':
                     sFlag[0][k] += 6;
                     break;
                case '7':
                     sFlag[0][k] += 7;
                     break;
                case '8':
                     sFlag[0][k] += 8;
                     break;
                case '9':
                     sFlag[0][k] += 9;
                     break;
                case 'T':
                     sFlag[0][k] += 10;
                     break;
                case 'J':
                     sFlag[0][k] += 11;
                     break;
                case 'Q':
                     sFlag[0][k] += 12;
                     break;
                case 'K':
                     sFlag[0][k] += 13;
                     break;
                case 'A':
                     sFlag[0][k] += 14;
                     break;
                default : break;
            }

            sFlag[1][k] = k;
            k++;
        }

        k=1;
        for (i=1, j=2; i<SIZE; i+=2, j+=2)
        {
            switch (W[i])
            {
                case 'C':
                     wFlag[0][k] += 20;
                     break;
                case 'D':
                     wFlag[0][k] += 40;
                     break;
                case 'S':
                     wFlag[0][k] += 60;
                     break;
                case 'H':
                     wFlag[0][k] += 80;
                     break;
                default : break;
            }

            switch (W[j])
            {
                case '2':
                     wFlag[0][k] += 2;
                     break;
                case '3':
                     wFlag[0][k] += 3;
                     break;
                case '4':
                     wFlag[0][k] += 4;
                     break;
                case '5':
                     wFlag[0][k] += 5;
                     break;
                case '6':
                     wFlag[0][k] += 6;
                     break;
                case '7':
                     wFlag[0][k] += 7;
                     break;
                case '8':
                     wFlag[0][k] += 8;
                     break;
                case '9':
                     wFlag[0][k] += 9;
                     break;
                case 'T':
                     wFlag[0][k] += 10;
                     break;
                case 'J':
                     wFlag[0][k] += 11;
                     break;
                case 'Q':
                     wFlag[0][k] += 12;
                     break;
                case 'K':
                     wFlag[0][k] += 13;
                     break;
                case 'A':
                     wFlag[0][k] += 14;
                     break;
                default : break;
            }

            wFlag[1][k] = k;
            k++;
        }

        k=1;
        for (i=1, j=2; i<SIZE; i+=2, j+=2)
        {
            switch (N[i])
            {
                case 'C':
                     nFlag[0][k] += 20;
                     break;
                case 'D':
                     nFlag[0][k] += 40;
                     break;
                case 'S':
                     nFlag[0][k] += 60;
                     break;
                case 'H':
                     nFlag[0][k] += 80;
                     break;
                default : break;
            }

            switch (N[j])
            {
                case '2':
                     nFlag[0][k] += 2;
                     break;
                case '3':
                     nFlag[0][k] += 3;
                     break;
                case '4':
                     nFlag[0][k] += 4;
                     break;
                case '5':
                     nFlag[0][k] += 5;
                     break;
                case '6':
                     nFlag[0][k] += 6;
                     break;
                case '7':
                     nFlag[0][k] += 7;
                     break;
                case '8':
                     nFlag[0][k] += 8;
                     break;
                case '9':
                     nFlag[0][k] += 9;
                     break;
                case 'T':
                     nFlag[0][k] += 10;
                     break;
                case 'J':
                     nFlag[0][k] += 11;
                     break;
                case 'Q':
                     nFlag[0][k] += 12;
                     break;
                case 'K':
                     nFlag[0][k] += 13;
                     break;
                case 'A':
                     nFlag[0][k] += 14;
                     break;
                default : break;
            }

            nFlag[1][k] = k;
            k++;
        }

        //用冒泡排序
        for (i=1; i<BIAOJI-1; i++)
        {
            for (j=i+1; j<BIAOJI; j++)
            {
                if (eFlag[0][i] > eFlag[0][j])
                {
                    k = eFlag[0][i];
                    eFlag[0][i] = eFlag[0][j];
                    eFlag[0][j] = k;

                    k = eFlag[1][i];
                    eFlag[1][i] = eFlag[1][j];
                    eFlag[1][j] = k;
                }
            }
        }

        for (i=1; i<BIAOJI-1; i++)
        {
            for (j=i+1; j<BIAOJI; j++)
            {
                if (sFlag[0][i] > sFlag[0][j])
                {
                    k = sFlag[0][i];
                    sFlag[0][i] = sFlag[0][j];
                    sFlag[0][j] = k;

                    k = sFlag[1][i];
                    sFlag[1][i] = sFlag[1][j];
                    sFlag[1][j] = k;
                }
            }
        }

        for (i=1; i<BIAOJI-1; i++)
        {
            for (j=i+1; j<BIAOJI; j++)
            {
                if (wFlag[0][i] > wFlag[0][j])
                {
                    k = wFlag[0][i];
                    wFlag[0][i] = wFlag[0][j];
                    wFlag[0][j] = k;

                    k = wFlag[1][i];
                    wFlag[1][i] = wFlag[1][j];
                    wFlag[1][j] = k;
                }
            }
        }

        for (i=1; i<BIAOJI-1; i++)
        {
            for (j=i+1; j<BIAOJI; j++)
            {
                if (nFlag[0][i] > nFlag[0][j])
                {
                    k = nFlag[0][i];
                    nFlag[0][i] = nFlag[0][j];
                    nFlag[0][j] = k;

                    k = nFlag[1][i];
                    nFlag[1][i] = nFlag[1][j];
                    nFlag[1][j] = k;
                }
            }
        }

        //输出
        printf("S:");
            for (i=1; i<BIAOJI; i++)
            {
                printf(" %c%c", S[2*sFlag[1][i] - 1], S[2*sFlag[1][i]]);
            }
            printf("\n");

            printf("W:");
            for (i=1; i<BIAOJI; i++)
            {
                printf(" %c%c", W[2*wFlag[1][i] - 1], W[2*wFlag[1][i]]);
            }
            printf("\n");

            printf("N:");
            for (i=1; i<BIAOJI; i++)
            {
                printf(" %c%c", N[2*nFlag[1][i] - 1], N[2*nFlag[1][i]]);
            }
            printf("\n");

            printf("E:");
            for (i=1; i<BIAOJI; i++)
            {
                printf(" %c%c", E[2*eFlag[1][i] - 1], E[2*eFlag[1][i]]);
            }
            printf("\n");
        scanf("%*c");
    }

    return 0;
}

















  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值