恶心的模拟
#include <iostream>
#include <cstdio>
#include <cctype>
#include <algorithm>
#include <cstring>
using namespace std;
struct Card
{
int suit;
int rank;
} card[4][13];
int p_cur[4];
int _turn(int t, bool is_player, bool is_in, bool is_suit);
bool _cmp(Card a, Card b);
void _print(Card s[], int kase);
int main()
{
int t;
while (t=getchar())
{
if (t == ' ' || t == '\n') continue;
if (t == '#') return 0;
int ch;
int cur = (_turn(t, true, false, false) + 1) % 4;
memset(card, 0, sizeof(card));
memset(p_cur, 0, sizeof(p_cur));
// input
int cnt = 0;
while (ch=getchar())
{
if (ch == '\n' || ch == ' ') continue;
else
{
card[cur][p_cur[cur]].suit = _turn(ch, false, true, false);
card[cur][p_cur[cur]].rank = _turn(getchar(), false, true, false);
p_cur[cur]++;
cur = (cur+1) % 4;
if (++cnt == 52) break;
}
}
// sort
for (int i = 0; i < 4; i++) sort(card[i], card[i]+13, _cmp);
// print
for (int i = 0; i < 4; i++) _print(card[i], i);
putchar('\n');
}
return 0;
}
const char PLAYER[] = "SWNE";
const char SUITS[] = "CDSH";
const char RANKS[] = " 23456789TJQKA" ;
int _turn(int t,bool is_player, bool is_in, bool is_suit)
{
if (is_player)
{
for (int i = 0; PLAYER[i] != '\0'; i++)
{
if (t == PLAYER[i]) return i;
}
}
else if (is_in)
{
for (int i = 0; SUITS[i] != '\0'; i++)
{
if (t == SUITS[i]) return i;
}
for (int i = 0; RANKS[i] != '\0'; i++)
{
if (t == RANKS[i]) return i;
}
}
else
{
if (is_suit) return SUITS[t];
else return RANKS[t];
}
}
bool _cmp(Card a, Card b)
{
if (a.suit != b.suit) return (a.suit < b.suit);
else return (a.rank < b.rank);
}
const char player_name[][16] = {"South player", "West player", "North player", "East player"};
void _print(Card s[], int kase)
{
printf("%s:\n", player_name[kase]);
for (int i = 1; i <= 5; i++)
{
for (int j = 1; j <= 53; j++)
{
if (i == 1 || i == 5)
{
if(j%4 == 1) putchar('+');
else putchar('-');
}
else if (i == 2 || i == 4)
{
if (j % 4 == 1) putchar('|');
else if(j % 4 == 3) putchar(' ');
else putchar(_turn(s[(j-1)/4].rank, false, false, false));
}
else
{
if (j % 4 == 1) putchar('|');
else if(j % 4 == 3) putchar(_turn(s[(j-1)/4].suit, false, false, true));
else putchar(' ');
}
}
putchar('\n');
}
}