【POJ2996】Help Me with the Game

题目传送门

本题知识点:模拟(如果对国际象棋不熟悉的同学可以先百度一下

题意很简单,就是让我们找出白棋跟黑棋每枚棋子的位置,并要按照一定的顺序输出( K -> Q -> R -> B -> N -> P ),清楚这一目的的话,实现只是时间上的问题了。

感觉该题可以用C语言里的枚举变量,但因为很少用,所以就懒得去琢磨了(好学的同学不要学我啊!),改用了比较麻烦的方式。

至于如何顺利地按顺序输出,这个见仁见智啦。

数据很小(快乐水题),即便暴力枚举也不会超时。

// POJ 2996
#include<iostream>
#include<cstdio>
using namespace std;
const int H = 17;
char ch[40][40];

struct node{
    string pla;
}white[20], black[20];

char who_w[20] = {"KQRRBBNNPPPPPPPP"};
char who_b[20] = {"kqrrbbnnpppppppp"};

int main()
{
    for(int i = 1; i <= H; i++){
        scanf("%s", ch[i] + 1);
    }

    int w = 0, cnt_w = 0;
    while(w < 16){
        for(int i = 16; i >= 2; i -= 2){
            bool ok = false;
            for(int j = 3; j <= 31; j += 4){
                if(ch[i][j] == who_w[w]){
                    string a = "";
                    if(w < 8) a += ch[i][j];
                    a += j / 4 + 'a';
                    if(i == 16) a += '1';
                    else if(i == 14) a += '2';
                    else if(i == 12) a += '3';
                    else if(i == 10) a += '4';
                    else if(i == 8)  a += '5';
                    else if(i == 6)  a += '6';
                    else if(i == 4)  a += '7';
                    else if(i == 2)  a += '8';
//                    cout << "a:" << a << endl;
                    white[cnt_w++].pla = a;
                    ch[i][j] = '*';
                    ok = true;
                    break;
                }
            }
            if(ok) break;
        }
        w++;
    }
//    cout << endl;
    int b = 0, cnt_b = 0;
    while(b < 16){
        for(int i = 2; i <= 16; i += 2){
            bool ok = false;
            for(int j = 3; j <= 31; j += 4){
                if(ch[i][j] == who_b[b]){
                    string a = "";
                    if(b < 8) a += who_w[b];
                    a += j / 4 + 'a';
                    if(i == 16) a += '1';
                    else if(i == 14) a += '2';
                    else if(i == 12) a += '3';
                    else if(i == 10) a += '4';
                    else if(i == 8)  a += '5';
                    else if(i == 6)  a += '6';
                    else if(i == 4)  a += '7';
                    else if(i == 2)  a += '8';
//                    cout << "a:" << a << endl;
                    black[cnt_b++].pla = a;
                    ch[i][j] = '*';
                    ok = true;
                    break;
                }
            }
            if(ok) break;
        }
        b++;
    }

    printf("White: ");
    for(int i = 0; i < cnt_w; i++){
        if(i != 0) cout << ",";
        cout << white[i].pla;
    } cout << endl;

    printf("Black: ");
    for(int i = 0; i < cnt_b; i++){
        if(i != 0) cout << ",";
        cout << black[i].pla;
    } cout << endl;

    return 0;
}

posted on 2019-09-17 15:38  Ayasan  阅读(170)  评论(0编辑  收藏  举报