タイトル
神HRZためにスイスの流行が、彼は非常に強力であった彼は水、水A +を取得できるようにするために、彼は退屈していたように、すべてのクラスが、ある、自宅で退屈、および3他の人々だ:カッコウ東、テンを神とのカードをプレイするzjm(スイス世界は今、いくつかの時間を神に苦しんで)。
明らかに、取締役会は4人、サークルで構成されています。私たちは、北、東西四方向を求めます。英語を対応する北、東、南、西です。52あるゲームの合計は、ポーカーで構成されています。初めは、私たちは(英語イニシャルのロゴと、トラックに)ディーラーを任命時計回りの順番をライセンス、ライセンス始め、ディーラーは自分の最初を送ったが、彼の次を行っていません人(時計回りに隣の人)。このように、誰もが13枚のカードを取得します。
今、我々は、(梅)<(正方形シート)<(スペード)<(心臓)、(入力、我々は、それぞれプラム、正方形片C、D、S、Hを使用する最初の色は、カードの順序を定義しますスペード、ハート、すなわち)単語の最初の文字という。符号の顔の値に対して、我々は、2 <3 <4 <5 <必要 6 <7 <8 <9 <T <J <Q <K <A。
今、あなたは、神のように、あなたは小さなからのカードの大きな手に皆を並べ替え、およびフォローする出力形式を設定する必要があります。(特定の出力フォーマット記述と出力例を参照)。
入力
入力は複数のデータセットが含まれ
、各データセットの最初の行のディーラーへのイエスを表し、大文字の文字が含まれています。文字は「#」であれば、入力の終わりを示します。
次の2行、行あたり52文字、ショー26枚のカードは、2行は52枚のカードの合計と一致し。各カードは、2つの文字からなり、最初の文字は色を表し、2番目の文字は値を示しています。
出力の
出力結果をライセンスデータの複数のセット、データの各セット(すなわち、ブランク期間を使用するデータ線のグループ間、テキストの終わりはまた、空行のために必要である)空白行の後に追加の出力を必要とします。
データの各セットは、常に五行、第一及び第五のライン出力固定続いサウスプレーヤーの出力、選手名出力線(トラック)に、すなわち各選手に、時計回り方向の出力線24を構成しますフォーマット(例を参照)、出力値の順序と形式で2行目と4行目(例を参照)、3行出力カラーシーケンスの形式(例を参照)。
サンプル入力
N
CTCAH8CJD4C6D9SQC7S5HAD2HJH9CKD3H6D6D7H3HQH4C5DKHKS9の
SJDTS3S7S4C4CQHTSAH2D8DJSTSKS2H5D5DQDAH7C9S8C8S6C2C3の
#
サンプル出力
韓国選手:
± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - +
| 6 6 | AA | 6 6 | JJ | 5 | 6 6 | 7 7 | 9 9 | 4 4 | 5 | 7 7 | 9 9 | TT |
| C | C | D | D | S | S | S | S | H | H | H | H | H |
| 6 6 | AA | 6 6 | JJ | 5 | 6 6 | 7 7 | 9 9 | 4 4 | 5 | 7 7 | 9 9 | TT |
± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - +
西プレイヤー:
± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - +
| 2 2 | 5 | 9 9 | KK | 5 | 7 7 | 9 9 | 4 4 | TT | JJ | AA | 8 8 | AA |
| C | C | C | C | D | D | D | S | S | S | S | H | H |
| 2 2 | 5 | 9 9 | KK | 5 | 7 7 | 9 9 | 4 4 | TT | JJ | AA | 8 8 | AA |
± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - +
ノースプレイヤー:
± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - +
| 3 3 | 4 4 | JJ | 2 2 | 3 3 | TT | QQ | KK | 8 8 | QQ | KK | 2 2 | 3 3 |
| C | C | C | D | D | D | D | D | S | S | S | H | H |
| 3 3 | 4 4 | JJ | 2 2 | 3 3 | TT | QQ | KK | 8 8 | QQ | KK | 2 2 | 3 3 |
± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - +
東プレイヤー:
± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - +
| 7 7 | 8 8 | TT | QQ | 4 4 | 8 8 | AA | 2 2 | 3 3 | 6 6 | JJ | QQ | KK |
| C | C | C | C | D | D | D | S | S | H | H | H | H |
| 7 7 | 8 8 | TT | QQ | 4 4 | 8 8 | AA | 2 2 | 3 3 | 6 6 | JJ | QQ | KK |
± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - ± - - +
思考
この問題は、マルチキーワードソートすることができます。
主キー(色):C <D <S < H
キーワード(公称値):2 <3 <4 < 5 <6 <7 <8 <9 <T <J <Q <K <
STLの使用ソート機能、適切な比較関数の調製:
①色が異なる場合に、比較のみが色の値を返します。
②額面返された値を比較すると、同じ色、。
コード
#include <iostream>
#include <vector>
#include <map>
#include <queue>
#include <utility>
#include <algorithm>
#include <stdlib.h>
#include <string.h>
using namespace std;
// pair<char, char> p; 第一个是花色,第二个数字
int iconValue(const char c)
{
switch (c)
{
case 'C':
return 0;
case 'D':
return 1;
case 'S':
return 2;
default: // 'H'
return 3;
}
}
int numValue(const char c)
{
if (c >= '2' && c <= '9') return c - '0';
switch (c)
{
case 'T':
return 10;
case 'J':
return 11;
case 'Q':
return 12;
case 'K':
return 13;
default: // 'A'
return 14;
}
}
// 先比较花色,再比较数字
bool cmp(const pair<char, char>& p1, const pair<char, char>& p2)
{
if (p1.first != p2.first) return iconValue(p1.first) < iconValue(p2.first);
else return numValue(p1.second) < numValue(p2.second);
}
void printCards(vector<pair<char, char>> v)
{
cout << "+---+---+---+---+---+---+---+---+---+---+---+---+---+" << endl;
cout << "|";
for (vector<pair<char, char>>::iterator it = v.begin(); it != v.end(); it++) {
cout << (*it).second << " " << (*it).second << "|";
}
cout << endl;
cout << "|";
for (vector<pair<char, char>>::iterator it = v.begin(); it != v.end(); it++) {
cout << " " << (*it).first << " " << "|";
}
cout << endl;
cout << "|";
for (vector<pair<char, char>>::iterator it = v.begin(); it != v.end(); it++) {
cout << (*it).second << " " << (*it).second << "|";
}
cout << endl;
cout << "+---+---+---+---+---+---+---+---+---+---+---+---+---+" << endl;
}
void print(vector<int> v)
{
vector<int>::iterator i1 = v.begin();
vector<int>::iterator i2 = v.begin(); i2++;
while (i2 != v.end()) {
cout << *i1 << " ";
i1++; i2++;
}
cout << *i1 << endl;
}
int main()
{
char pos;
cin >> pos;
while (pos != '#') {
string order;
if (pos == 'N') order = "4123";
else if (pos == 'E') order = "1234";
else if (pos == 'S') order = "2341";
else order = "3412";
string print_order[] = { "South player:","West player:","North player:" ,"East player:" };
vector<pair<char, char>> v[4];
for (int i = 0; i < 13; i++) {
for (int j = 0; j < 4; j++) {
char icon, num;
cin >> icon >> num;
pair<char, char> p(icon, num);
v[j].push_back(p);
}
}
for (int i = 0; i < 4; i++) {
sort(v[i].begin(), v[i].end(), cmp);
}
cout << "South player:" << endl;
int index = order.find(1 + '0');
printCards(v[index]);
cout << "West player:" << endl;
index = order.find(2 + '0');
printCards(v[index]);
cout << "North player:" << endl;
index = order.find(3 + '0');
printCards(v[index]);
cout << "East player:" << endl;
index = order.find(4 + '0');
printCards(v[index]);
cout << endl;
cin >> pos;
}
}
終わり