• poj 2996 Help Me with the Game 模拟


    国际象棋棋盘模拟
    题意:
    1、不论黑白,KQRBNP均是依次输出,强制大写,但不输出“P”,只输出其坐标
    2、白棋:行的数字越小则优先输出,同行则按列的顺序(a~h)
    3、黑棋:行的数字越大则优先输出,同行则按列的顺序(a~h)
    4、棋子可能不齐全,不存在的棋子不输出,用标记解决
    5、注意逗号的输出格式

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #define N 300
    using namespace std;
    struct by
    {
        char c;
        int num;
        int m0[N];
        int m1[N];
    } b[N];
    struct bby
    {
        int m0,m1;
    } bm[N];
    bool cmpw(struct bby q,struct bby w)
    {
        if(q.m0==w.m0)
            return q.m1<w.m1;
        return q.m0<w.m0;
    }
    bool cmpb(struct bby q,struct bby w)
    {
        if(q.m0==w.m0)
            return q.m1<w.m1;
        return q.m0>w.m0;
    }
    int main()
    {
        char map[N][N];
        memset(b,0,sizeof(b));
        int i,k=17,j;
        for(i=0; i<17; i++)
            scanf("%s",map[i]);
        b[0].c='K',b[1].c='Q',b[2].c='R',b[3].c='B',b[4].c='N';
        b[10].c='K',b[11].c='Q',b[12].c='R',b[13].c='B',b[14].c='N';
        for(i=1; i<k; i+=2) {
            for(j=0; map[i][j]; j++) {
                switch(map[i][j]) {
                case 'K':
                    b[0].m0[b[0].num]=k-i,b[0].m1[b[0].num]=j/4,b[0].num++;
                    break;
                case 'Q':
                    b[1].m0[b[1].num]=k-i,b[1].m1[b[1].num]=j/4,b[1].num++;
                    break;
                case 'R':
                    b[2].m0[b[2].num]=k-i,b[2].m1[b[2].num]=j/4,b[2].num++;
                    break;
                case 'B':
                    b[3].m0[b[3].num]=k-i,b[3].m1[b[3].num]=j/4,b[3].num++;
                    break;
                case 'N':
                    b[4].m0[b[4].num]=k-i,b[4].m1[b[4].num]=j/4,b[4].num++;
                    break;
                case 'P':
                    b[5].m0[b[5].num]=k-i,b[5].m1[b[5].num]=j/4,b[5].num++;
                    break;
                case 'k':
                    b[10].m0[b[10].num]=k-i,b[10].m1[b[10].num]=j/4,b[10].num++;
                    break;
                case 'q':
                    b[11].m0[b[11].num]=k-i,b[11].m1[b[11].num]=j/4,b[11].num++;
                    break;
                case 'r':
                    b[12].m0[b[12].num]=k-i,b[12].m1[b[12].num]=j/4,b[12].num++;
                    break;
                case 'b':
                    b[13].m0[b[13].num]=k-i,b[13].m1[b[13].num]=j/4,b[13].num++;
                    break;
                case 'n':
                    b[14].m0[b[14].num]=k-i,b[14].m1[b[14].num]=j/4,b[14].num++;
                    break;
                case 'p':
                    b[15].m0[b[15].num]=k-i,b[15].m1[b[15].num]=j/4,b[15].num++;
                    break;
                }
            }
        }
        cout<<"White: ";
        int flag=0;
        for(i=0; i<=5; i++) {
            for(j=0; j<b[i].num; j++)/*由于弱弱的我对于结构体的排序不太清楚,就只好另存一个数组中啦*/
            {
                bm[j].m0=b[i].m0[j]/2;
                bm[j].m1=b[i].m1[j];
            }
            sort(bm,bm+b[i].num,cmpw);
            for(j=0; j<b[i].num; j++) {
                if(flag)/*此处的逗号输出想了很久*/
                    printf(",");
                flag++;
                if(i!=5)
                    cout<<b[i].c;
                printf("%c",bm[j].m1+'a');
                printf("%d",bm[j].m0);
            }
        }
        cout<<endl;
        cout<<"Black: ";
        flag=0;
        for(i=10; i<=15; i++) {
            for(j=0; j<b[i].num; j++)
            {
                bm[j].m0=b[i].m0[j]/2;
                bm[j].m1=b[i].m1[j];
            }
            sort(bm,bm+b[i].num,cmpb);
            for(j=0; j<b[i].num; j++) {
                if(flag)
                    printf(",");
                flag++;
                if(i!=15)
                    cout<<b[i].c;
                printf("%c",bm[j].m1+'a');
                printf("%d",bm[j].m0);
            }
        }
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    SQLServer提取日期中的年月日及其他格式
    大白话解说,半分钟就懂 --- 分布式与集群是什么 ? 区别是什么?
    VS2015 Git 源码管理工具简单入门
    Web.Config配置文件中customErrors元素的使用方法
    C#发起Http请求,调用接口
    如何停止和禁用Linux系统中的不需要的服务
    QtCreator调试传入运行参数
    gSOAP 在windows下的安装与使用(mingw32)
    MinGW 使用 mintty 终端替代默认终端以解决界面上复制与粘贴的问题
    在windows下执行./configure,make,makeinstall源码安装程序spice-gtk
  • 原文地址:https://www.cnblogs.com/yu0111/p/5356378.html
Copyright © 2020-2023  润新知