POJ2996 Help Me with the Game 模拟题

来源:互联网 发布:淘宝美工可以自学吗 编辑:程序博客网 时间:2024/04/30 02:54

题目大意:模拟出一个国际象棋的棋盘,给出你一个8×8的棋盘(行坐标由左到右为a到h,列坐标由上到下为8到1),和棋盘上的棋子,棋子有黑白两方,棋子有K,Q,R,B,N,和P 6种(但不一定全都有),让你分别找出棋盘上的黑白棋子的种类和坐标。


分析:模拟题,叙述很复杂,题其实很简单,就是个输入输出之间的转换。因为棋盘上每一点其实是有3个点构成的,为了方便找坐标,这里我用0到32分别表示每一列,用1到17表示行,这样做的好处就是,对于某一棋子的列坐标,我们只需拿棋盘上该点的列坐标c/4+' a '就行了,这样就得到了该棋子在a到h范围内的列坐标;对于行坐标,由于棋盘上行坐标是由下到上的,所以需要拿该点的行坐标r先除以2,这样就得到了由上到下排列时的行坐标了,再拿9减去这个数就得到了棋子真正的行坐标了。遍历棋子时用switch语句,能更方便的同时筛选出这6个点。另外输出的时候要注意排序,这6个棋子的输出顺序题中已给出,行列的优先就要自己由样例找了:对于白色棋子,行和列都按由小到大的顺序输出;但对于黑色棋子,行按由大到小的顺醋输出,列按由小到大的顺序输出。


实现代码如下:

#include <cstdio>#include <iostream>#include <algorithm>using namespace std;char map[40][20];typedef struct node{    int x,y,p;    char ch;}piece;piece up[100];piece lo[100];int cmp1(const piece &a,const piece &b){    if(a.p==b.p&&a.y==b.y) return a.x<b.x;    else if(a.p==b.p) return a.y<b.y;    else return a.p<b.p;}int cmp2(const piece &a,const piece &b){    if(a.p==b.p&&a.y==b.y) return a.x<b.x;    else if(a.p==b.p) return a.y>b.y;    else return a.p<b.p;}void output(){    int i,j;    int cnt1=0,cnt2=0;    for(j=1;j<=17;j++)      for(i=0;i<33;i++)      {          switch(map[i][j])          {              case 'K':up[cnt1].p=1;                       up[cnt1].x=i/4+'a';                       up[cnt1].y=9-j/2;                       up[cnt1].ch='K';                       cnt1++;                       break;              case 'Q':up[cnt1].p=2;                       up[cnt1].x=i/4+'a';                       up[cnt1].y=9-j/2;                       up[cnt1].ch='Q';                       cnt1++;                       break;              case 'R':up[cnt1].p=3;                       up[cnt1].x=i/4+'a';                       up[cnt1].y=9-j/2;                       up[cnt1].ch='R';                       cnt1++;                       break;              case 'B':up[cnt1].p=4;                       up[cnt1].x=i/4+'a';                       up[cnt1].y=9-j/2;                       up[cnt1].ch='B';                       cnt1++;                       break;              case 'N':up[cnt1].p=5;                       up[cnt1].x=i/4+'a';                       up[cnt1].y=9-j/2;                       up[cnt1].ch='N';                       cnt1++;                       break;              case 'P':up[cnt1].p=6;                       up[cnt1].x=i/4+'a';                       up[cnt1].y=9-j/2;                       up[cnt1].ch='P';                       cnt1++;                       break;          }          switch(map[i][j])          {              case 'k':lo[cnt2].p=1;                       lo[cnt2].x=i/4+'a';                       lo[cnt2].y=9-j/2;                       lo[cnt2].ch='K';                       cnt2++;                       break;              case 'q':lo[cnt2].p=2;                       lo[cnt2].x=i/4+'a';                       lo[cnt2].y=9-j/2;                       lo[cnt2].ch='Q';                       cnt2++;                       break;              case 'r':lo[cnt2].p=3;                       lo[cnt2].x=i/4+'a';                       lo[cnt2].y=9-j/2;                       lo[cnt2].ch='R';                       cnt2++;                       break;              case 'b':lo[cnt2].p=4;                       lo[cnt2].x=i/4+'a';                       lo[cnt2].y=9-j/2;                       lo[cnt2].ch='B';                       cnt2++;                       break;              case 'n':lo[cnt2].p=5;                       lo[cnt2].x=i/4+'a';                       lo[cnt2].y=9-j/2;                       lo[cnt2].ch='N';                       cnt2++;                       break;              case 'p':lo[cnt2].p=6;                       lo[cnt2].x=i/4+'a';                       lo[cnt2].y=9-j/2;                       lo[cnt2].ch='P';                       cnt2++;                       break;          }      }    cnt1-=1;    cnt2-=1;    sort(up,up+cnt1,cmp1);    sort(lo,lo+cnt2,cmp2);    printf("White: ");    for(i=0;i<cnt1;i++)    {        if(i==cnt1-1)        {            if(up[i].ch=='P') printf("%c%d\n",up[i].x,up[i].y);            else printf("%c%c%d\n",up[i].ch,up[i].x,up[i].y);        }        else        {            if(up[i].ch=='P') printf("%c%d,",up[i].x,up[i].y);            else printf("%c%c%d,",up[i].ch,up[i].x,up[i].y);        }    }    printf("Black: ");    for(i=0;i<cnt2;i++)    {        if(i==cnt2-1)        {            if(lo[i].ch=='P') printf("%c%d\n",lo[i].x,lo[i].y);            else printf("%c%c%d\n",lo[i].ch,lo[i].x,lo[i].y);        }        else        {            if(up[i].ch=='P') printf("%c%d,",lo[i].x,lo[i].y);            else printf("%c%c%d,",lo[i].ch,lo[i].x,lo[i].y);        }    }}int main(){    int i,j;    for(j=1;j<=17;j++)      for(i=0;i<33;i++)        cin>>map[i][j];    output();    return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 收到一封拘留信怎么办 存钱的收据掉了怎么办 行政拘留法制没有批的怎么办 别人起诉我我该怎么办 去钟落潭看守所送衣服要怎么办 长城宽带账号密码忘了怎么办 预约考试密码忘了怎么办 健康证预约号忘记怎么办啊 人在看守所七个月还没结果怎么办 起诉书和判决书丢了怎么办 进了看守所信用卡逾期怎么办 公安局审讯室监控影相被删除怎么办 关进看守所以前的工作怎么办 上海初中借读生学籍怎么办 外地货北京三环怎么办 谁买了小产权怎么办 狗在小区丢了怎么办 太原回迁房多余的房子怎么办 回迁房被开发商抵押怎么办 回迁房源多开发商扣房怎么办 蝈蝈叫晚上怕吵怎么办 蝈蝈总不停的叫怎么办 按揭房没拿房产证夫妻离婚怎么办 按揭房子房产证还没有到离婚怎么办 结婚7年离婚孩子怎么办 合伙经营KTV股东意见不合怎么办 合伙生意转让意见不合怎么办 租完房子后悔了怎么办 通过中介买房产生纠纷怎么办 天津公租房资格证到期怎么办 买大房子后悔了怎么办 公款私存了该怎么办 外地人怎么办身份证在北京东城区 申请公租房有车怎么办 租了公租房辞职怎么办 申请公租房收入明细没有怎么办 杭州公租房满3年怎么办 小学寄读不转学籍手续怎么办 炸东西的油糊了怎么办 赠送面积为违建怎么办 执法不管违建我怎么办