- POJ 2993 - Emag eht htiw Em Pleh
- Time: 1000MS
- Memory: 65536K
- 难度: 初级
- 分类: 模拟法
问题描述
详见 http://poj.org/problem?id=2993
解题思路
提示: 很烦很简单的国际象棋棋盘模拟,输入比较麻烦而已。
这题是 POJ2996 的相反情况,有趣的是,不难发现 2993 的题目和 2996 的题目字符也是相反的:
- POJ2993-Emag eht htiw Em Pleh
- POJ2996-Help Me with the Game
AC 源码
//Memory Time
//212K 0MS
#include<iostream>
#include<string>
using namespace std;
class whit
{
public:
int row;
char col;
char pie;
}ww[16];
class blac
{
public:
int row;
char col;
char pie;
}bb[16];
int main(void)
{
char white[63],black[63];
gets(white);
gets(black);
int x,y,z,r;
int count_w=0;
int count_b=0;
const int length_w=strlen(white);
const int length_b=strlen(black);
for(x=7,y=0;x<length_w;)
if(white[x]>='B' && white[x]<='R')
{
ww[y].pie=white[x];
ww[y].col=white[x+1];
ww[y].row=white[x+2]-'0'; //字符转数字
y++;
x+=4;
count_w++;
}
else if(white[x]>='a' && white[x]<='h')
{
ww[y].pie='P';
ww[y].col=white[x];
ww[y].row=white[x+1]-'0';
y++;
x+=3;
count_w++;
}
else
break;
for(x=7,y=0;x<length_b;)
if(black[x]>='B' && black[x]<='R')
{
bb[y].pie=black[x]+32; //大写字母转换小写字母
bb[y].col=black[x+1];
bb[y].row=black[x+2]-'0';
y++;
x+=4;
count_b++;
}
else if(black[x]>='a' && black[x]<='h')
{
bb[y].pie='p';
bb[y].col=black[x];
bb[y].row=black[x+1]-'0';
y++;
x+=3;
count_b++;
}
else
break;
char chess[9]['i'];
memset(chess,':',sizeof(chess));
for(x=1;x<=7;x+=2)
for(y='a';y<='g';y+=2)
chess[x][y]='.';
for(x=2;x<=8;x+=2)
for(y='b';y<='h';y+=2)
chess[x][y]='.';
for(x=0;x<count_w;x++)
chess[9-ww[x].row][ww[x].col]=ww[x].pie;
for(x=0;x<count_b;x++)
chess[9-bb[x].row][bb[x].col]=bb[x].pie;
cout<<"+---+---+---+---+---+---+---+---+"<<endl;
for(x=1,r=2;x<=7;x+=2,r+=2)
{
cout<<'|';
for(y='a',z='b';y<='g';y+=2,z+=2)
cout<<"."<<chess[x][y]<<".|:"<<chess[x][z]<<":|";
cout<<endl;
cout<<"+---+---+---+---+---+---+---+---+"<<endl;
cout<<'|';
for(y='a',z='b';y<='g';y+=2,z+=2)
cout<<":"<<chess[r][y]<<":|."<<chess[r][z]<<".|";
cout<<endl;
cout<<"+---+---+---+---+---+---+---+---+"<<endl;
}
return 0;
}