国际象棋棋盘换一种方式输出,模拟无难度。 #include <iostream> #include <cstdio> #include <cstring> using namespace std; class white_piece { public: int row; char col; bool flag; // 就给K,Q用呗 } K, Q, R[3], B[3], N[3]; // 3是为了做交换临时空间用 bool P[9]['i'] = {false}; int PR = 0, PB = 0, PN = 0; //黑棋需要大行在前输出,与读入顺序一致 class black_piece { public: int row; char col; bool flag; } k, q, r[2], b[2], n[2], p[9]; int pr = 0, pb = 0, pn = 0, pp = 0; //行列,个数,棋盘 int x; char y; int w_count = 0; int b_count = 0; char chess[9]['i']; // 'i' > 'h' void judge() { if (chess[x][y] == '.' || chess[x][y] == ':') return; if (chess[x][y] == 'k') { k.row = x; k.col = y; k.flag = true; ++b_count; return; } else if (chess[x][y] == 'q') { q.row = x; q.col = y; q.flag = true; ++b_count; return; } else if (chess[x][y] == 'r') { r[pr].row = x; r[pr++].col = y; ++b_count; return; } else if (chess[x][y] == 'b') { b[pb].row = x; b[pb++].col = y; ++b_count; return; } else if (chess[x][y] == 'n') { n[pn].row = x; n[pn++].col = y; ++b_count; return; } else if (chess[x][y] == 'p') { p[pp].row = x; p[pp++].col = y; ++b_count; return; } else if (chess[x][y] == 'K') { K.row = x; K.col = y; K.flag = true; ++w_count; return; } else if (chess[x][y] == 'Q') { Q.row = x; Q.col = y; Q.flag = true; ++w_count; return; } else if (chess[x][y] == 'R') { R[PR].row = x; R[PR++].col = y; ++w_count; return; } else if (chess[x][y] == 'B') { B[PB].row = x; B[PB++].col = y; ++w_count; return; } else if (chess[x][y] == 'N') { N[PN].row = x; N[PN++].col = y; ++w_count; return; } else if (chess[x][y] == 'P') { // 白棋因为小行优先,需要排序 P[x][y] = true; ++w_count; return; } } void print() { cout << "White: "; if (K.flag) { cout << 'K' << K.col << K.row; if (--w_count > 0) cout << ','; } if (Q.flag) { cout << 'Q' << Q.col << Q.row; if (--w_count > 0) cout << ','; } if (PR == 2) { if (R[0].row > R[1].row) { R[2] = R[0]; R[0] = R[1]; R[1] = R[2]; } } for (int i = 0; i < PR; ++i) { cout << 'R' << R[i].col << R[i].row; if (--w_count > 0) cout << ','; } if (PB == 2) { if (B[0].row > B[1].row) { B[2] = B[0]; B[0] = B[1]; B[1] = B[2]; } } for (int i = 0; i < PB; ++i) { cout << 'B' << B[i].col << B[i].row; if (--w_count > 0) cout << ','; } if (PN == 2) { if (N[0].row > N[1].row) { N[2] = N[0]; N[0] = N[1]; N[1] = N[2]; } } for (int i = 0; i < PN; ++i) { cout << 'N' << N[i].col << N[i].row; if (--w_count > 0) cout << ','; } for (int i = 1; i <= 8; ++i) { for (char j = 'a'; j <= 'h'; ++j) { if (P[i][j]) { cout << j << i; if (--w_count > 0) cout << ','; } } } cout << endl; cout << "Black: "; if (k.flag) { cout << 'K' << k.col << k.row; if (--b_count > 0) cout << ','; } if (q.flag) { cout << 'Q' << q.col << q.row; if (--b_count > 0) cout << ','; } for (int i = 0; i < pr; ++i) { //因为黑棋是大行在前面,不用再排序 cout << 'R' << r[i].col << r[i].row; if (--b_count > 0) cout << ','; } for (int i = 0; i < pb; ++i) { cout << 'B' << b[i].col << b[i].row; if (--b_count > 0) cout << ','; } for (int i = 0; i < pn; ++i) { cout << 'N' << n[i].col << n[i].row; if (--b_count > 0) cout << ','; } for (int i = 0; i < pp; ++i) { cout << p[i].col << p[i].row; if (--b_count > 0) cout << ','; } cout << endl; } int main() { // freopen("temp.txt", "r", stdin); char temp; for (int i = 1; i <= 33; ++i) cin >> temp; for (x = 8; x >= 1; --x) { cin >> temp; for (y = 'a'; y <= 'h'; ++y) { cin >> temp >> chess[x][y] >> temp >> temp; judge(); } for (int i = 1; i <= 33; ++i) cin >> temp; } print(); return 0; }