poj 1786 Bridge Hands

来源:互联网 发布:网络优化电子书 编辑:程序博客网 时间:2024/05/22 01:27
//比较简单的一道模拟题,模拟扑克牌的派发! #include <iostream>#include <string>#include <vector>#include <cctype>#include <algorithm>#include <map>using namespace std;struct Info//扑克牌的牌面 {    char num;    char color;}card;//各个选手的牌 vector<Info> n;vector<Info> e;vector<Info> s;vector<Info> w;map<char, int> m;map<char, int> mm;bool cmp(Info a, Info b)//主要是这个比较函数,通过map函数,使其不同字母的比较变得简单了! {     if (a.color == b.color)     {         if ((isdigit(a.num) && isdigit(b.num)) || (isdigit(a.num) && isalpha(b.num)) || (isdigit(b.num) && isalpha(a.num)))            return a.num < b.num;         else if (isalpha(a.num) && isalpha(b.num))            return m[a.num] < m[b.num];     }     else      {          return mm[a.color] < mm[b.color];     }    }int main(){    int i;    char direction;    string str1, str2, str;    m['T'] = 1, m['J'] = 2, m['Q'] = 3, m['K'] = 4, m['A'] = 5;    mm['C'] = 1, mm['D'] = 2, mm['S'] = 3, mm['H'] = 4;    while (cin >> direction)    {          if (direction == '#') break;          n.clear(), e.clear(), s.clear(), w.clear();          cin >> str1 >> str2;          str = str1 + str2;          if (direction == 'N')//如果是N派发,则派牌的顺序是eswn!下面的则照顺时针推出!           {              for (i = 0; i < 104; i += 2)              {                  card.color = str[i];                  card.num = str[i+1];                  if (i%8==0)                     e.push_back(card);                  else if (i%8==2)                     s.push_back(card);                  else if (i%8==4)                     w.push_back(card);                  else if (i%8==6)                     n.push_back(card);              }          }          else if (direction == 'E')          {              for (i = 0; i < 104; i += 2)              {                  card.color = str[i];                  card.num = str[i+1];                  if (i%8==0)                     s.push_back(card);                  else if (i%8==2)                     w.push_back(card);                  else if (i%8==4)                     n.push_back(card);                  else if (i%8==6)                     e.push_back(card);              }          }          else if (direction == 'S')          {               for (i = 0; i < 104; i += 2)              {                  card.color = str[i];                  card.num = str[i+1];                  if (i%8==0)                     w.push_back(card);                  else if (i%8==2)                     n.push_back(card);                  else if (i%8==4)                     e.push_back(card);                  else if (i%8==6)                     s.push_back(card);              }          }          else if (direction == 'W')          {               for (i = 0; i < 104; i += 2)              {                  card.color = str[i];                  card.num = str[i+1];                  if (i%8==0)                     n.push_back(card);                  else if (i%8==2)                     e.push_back(card);                  else if (i%8==4)                     s.push_back(card);                  else if (i%8==6)                     w.push_back(card);              }          }                    sort(s.begin(), s.end(), cmp);          sort(w.begin(), w.end(), cmp);          sort(n.begin(), n.end(), cmp);          sort(e.begin(), e.end(), cmp);          cout << "South player:" << endl;          cout << "+---+---+---+---+---+---+---+---+---+---+---+---+---+" << endl;          for (i = 0; i < 13; i++)              cout << "|" << s[i].num << " " << s[i].num;          cout << "|" << endl;          for (i = 0; i < 13; i++)              cout << "| " << s[i].color << " ";          cout << "|" << endl;           for (i = 0; i < 13; i++)              cout << "|" << s[i].num << " " << s[i].num;          cout << "|" << endl;          cout << "+---+---+---+---+---+---+---+---+---+---+---+---+---+" << endl;          cout << "West player:" << endl;          cout << "+---+---+---+---+---+---+---+---+---+---+---+---+---+" << endl;          for (i = 0; i < 13; i++)              cout << "|" << w[i].num << " " << w[i].num;          cout << "|" << endl;          for (i = 0; i < 13; i++)              cout << "| " << w[i].color << " ";          cout << "|" << endl;           for (i = 0; i < 13; i++)              cout << "|" << w[i].num << " " << w[i].num;          cout << "|" << endl;          cout << "+---+---+---+---+---+---+---+---+---+---+---+---+---+" << endl;          cout << "North player:" << endl;          cout << "+---+---+---+---+---+---+---+---+---+---+---+---+---+" << endl;          for (i = 0; i < 13; i++)              cout << "|" << n[i].num << " " << n[i].num;          cout << "|" << endl;          for (i = 0; i < 13; i++)              cout << "| " << n[i].color << " ";          cout << "|" << endl;           for (i = 0; i < 13; i++)              cout << "|" << n[i].num << " " << n[i].num;          cout << "|" << endl;          cout << "+---+---+---+---+---+---+---+---+---+---+---+---+---+" << endl;          cout << "East player:" << endl;          cout << "+---+---+---+---+---+---+---+---+---+---+---+---+---+" << endl;          for (i = 0; i < 13; i++)              cout << "|" << e[i].num << " " << e[i].num;          cout << "|" << endl;          for (i = 0; i < 13; i++)              cout << "| " << e[i].color << " ";          cout << "|" << endl;           for (i = 0; i < 13; i++)              cout << "|" << e[i].num << " " << e[i].num;          cout << "|" << endl;          cout << "+---+---+---+---+---+---+---+---+---+---+---+---+---+" << endl;          cout << endl;    }        system("pause");}/*NCQDTC4D8S7HTDAH7D2S3D6C6S6D9S4SAD7H2CKH5D3CTS8C9H3C3DQS9SQDJH8HAS2SKD4H4S5C7SJC8DKC5C2CAHQCJSTH6HKH9D5HJSCQDTC4D8S7HTDAH7D2S3D6C6S6D9S4SAD7H2CKH5D3CTS8C9H3C3DQS9SQDJH8HAS2SKD4H4S5C7SJC8DKC5C2CAHQCJSTH6HKH9D5HJ#*/

原创粉丝点击