• 【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;
    }
    
    
  • 相关阅读:
    Mysql 备份 导入导出
    简 历
    Mysql 表结构 创建 限制 关联
    Unity 碰撞检测
    Unity 获取键值
    关于大型网站系统的一些问题
    关于zookeeper
    dubbo分布式和消息队列
    集群
    cookie及安全问题
  • 原文地址:https://www.cnblogs.com/Ayanowww/p/11534214.html
Copyright © 2020-2023  润新知