题目链接: 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;
}