• POJ2996 Help Me with the Game 模拟


    该题为一道纯模拟题,不需要任何算法。在选择棋子的时候定义好排序规则,将其一次排序出来。

    代码如下:

    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <cctype>
    #include <algorithm>
    using namespace std;
    
    int pos = 0;
    
    int hash[255];
    
    struct Node
    {
        char kind;
        int x, y;
        bool operator < (Node t) const
        {
            if (hash[kind] != hash[t.kind]) {
                return hash[kind] > hash[t.kind];
            }
            else if (isupper(kind)){
                if (y != t.y) {
                    return y < t.y;
                }
                else {
                    return x < t.x;
                }
            }
            else {
                if (y != t.y) {
                    return y > t.y;
                }
                else {
                    return x < t.x;
                }
            }
        }
    }e[100];
    
    char s[100];
    
    void pre()
    {
        hash['K'] = 100, hash['Q'] = 99, hash['R'] = 98;
        hash['B'] = 97, hash['N'] = 96, hash['P'] = 95;
        hash['k'] = 94, hash['q'] = 93, hash['r'] = 92;
        hash['b'] = 91, hash['n'] = 90, hash['p'] = 89;    
    }
    
    void deal(int y)
    {
        int len = strlen(s);
        for (int i = 0; i < len; ++i) {
            if (isalpha(s[i])) {
                ++pos;
                e[pos].y = y;
                e[pos].x = ((i-2)>>2)+1; 
                e[pos].kind = s[i];
            }
        }
    }
    
    void print()
    {
        int i;
        printf("White: ");
        for (i = 1; i <= pos && isupper(e[i].kind); ++i) {
            if (i == 1) {
                if (e[i].kind != 'P') {
                    printf("%c%c%d", e[i].kind, e[i].x-1+'a', e[i].y);
                }
                else {
                    printf("%c%d", e[i].x-1+'a', e[i].y);
                }
            }
            else {
                if (e[i].kind != 'P') {
                    printf(",%c%c%d", e[i].kind, e[i].x-1+'a', e[i].y);
                }
                else {
                    printf(",%c%d", e[i].x-1+'a', e[i].y);
                }
            }
        }    
        printf("\nBlack: ");
        for (int j = i; j <= pos; ++j) {
            if (j == i) {
                if (e[j].kind != 'p') {
                    printf("%c%c%d", e[j].kind-32, e[j].x-1+'a', e[j].y);
                }
                else {
                    printf("%c%d", e[j].x-1+'a', e[j].y);
                }
            }
            else {
                if (e[j].kind != 'p') {
                    printf(",%c%c%d", e[j].kind-32, e[j].x-1+'a', e[j].y);
                }
                else {
                    printf(",%c%d", e[j].x-1+'a', e[j].y);
                }
            }
        }
        puts("");
    }
    
    int main()
    {
        pre();
        for (int i = 1; i <= 17; ++i) {
            gets(s);
            if ((i & 1) == 0) {  // 说明该行为有效行 
                deal(9-(i>>1));
            }
        }
        sort(e+1, e+1+pos);
        print();
    //    system("pause");
        return 0;    
    }
  • 相关阅读:
    Abp 领域事件简单实践 <一>
    Abp session和Cookie
    Abp 聚合测试
    反向代理
    Angular 变更检测
    VS 之github
    Docker 启动SQLServer
    查出第二大的数是多少
    DDD 理解
    ActionBar的简单应用
  • 原文地址:https://www.cnblogs.com/Lyush/p/2570869.html
Copyright © 2020-2023  润新知