pku 2993 第一周训练——模拟

本文提供了一道来自POJ平台编号为2993的题目解答代码,该题需要构建一个特殊的棋盘,并在指定位置放置棋子。通过字符串解析和坐标映射的方式实现了黑白棋子的放置。

http://poj.org/problem?id=2993

上一周的训练还没做完,唉。只能延续第一周的训练计划了。和pku2996正好过程相反。。。谢模拟题实在是太费劲了。。细节细节注意。

View Code
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char str[20][40];
int main()
{
int i,j,k,l;
int len;
//首先排除字母构造整个表
for (i = 0; i < 17; i += 2)
{
for (j = 0; j < 33; ++j)
{
if (j%4 == 0)
str[i][j] = '+';
else
str[i][j] = '-';
}
}
int flag = 1;
for (i = 1; i < 17; i += 2)
{
if (flag)
{
flag = 0;
int pos = 0;
for (j = 0; j <= 28; j += 4)
{
str[i][j] = '|';
if (!pos)
{
pos = 1;
for (k = j + 1; k < j + 4; ++k)
str[i][k] = '.';
}
else
{
pos = 0;
for (k = j + 1; k < j + 4; ++k)
str[i][k] = ':';
}
}
str[i][j] = '|';
}
else
{
flag = 1;
int pos = 0;
for (j = 0; j <= 28; j += 4)
{
str[i][j] = '|';
if (!pos)
{
pos = 1;
for (k = j + 1; k < j + 4; ++k)
str[i][k] = ':';
}
else
{
pos = 0;
for (k = j + 1; k < j + 4; ++k)
str[i][k] = '.';
}
}
str[i][j] = '|';
}
}
//处理黑白
char pp[10];
char T[1007];
scanf("%s",pp);
scanf("%s",T);
//printf("%s%s\n",pp,T);
len = strlen(T);
char tmp[4] = {'0'};
l = 0;
int x,y;
for (i = 0; i < len; ++i)
{
if (T[i] == ',')
{
//printf(">>%s\n",tmp);
if (l == 3)
{
y = (tmp[1] - 'a')*4 + 2;
x = 17 - (tmp[2] - '0')*2;
str[x][y] = tmp[0];
}
else if (l == 2)
{
y = (tmp[0] - 'a')*4 + 2 ;
x = 17 - (tmp[1] - '0')*2;
str[x][y] = 'P';
}
l = 0;
tmp[0] = tmp[1] = tmp[2] = '0';
}
else
tmp[l++] = T[i];
}
if (l == 3)
{
y = (tmp[1] - 'a')*4 + 2;
x = 17 - (tmp[2] - '0')*2;
str[x][y] = tmp[0];
}
else if (l == 2)
{
y = (tmp[0] - 'a')*4 + 2;
x = 17 - (tmp[1] - '0')*2;
str[x][y] = 'P';
}
//printf(">%s\n",tmp);
tmp[0] = tmp[1] = tmp[2] = '0';

scanf("%s",pp);
scanf("%s",T);
//printf("%s%s\n",pp,T);
len = strlen(T);
l = 0;
for (i = 0; i < len; ++i)
{
if (T[i] == ',')
{
//printf("%s\n",tmp);
if (l == 3)
{
y = (tmp[1] - 'a')*4 + 2;
x = 17 - (tmp[2] - '0')*2;
str[x][y] = tmp[0] + 32;
}
else if (l == 2)
{
y = (tmp[0] - 'a')*4 + 2;
x = 17 - (tmp[1] - '0')*2;
str[x][y] = 'p';
}
l = 0;
tmp[0] = tmp[1] = tmp[2] = '0';
}
else
tmp[l++] = T[i];
}
if (l == 3)
{
y = (tmp[1] - 'a')*4 + 2;
x = 17 - (tmp[2] - '0')*2;
str[x][y] = tmp[0] + 32;
}
else if (l == 2)
{
y = (tmp[0] - 'a')*4 + 2;
x = 17 - (tmp[1] - '0')*2;
str[x][y] = 'p';
}
//printf("%s\n",tmp);
tmp[0] = tmp[1] = tmp[2] = '0';
for (i = 0; i < 17; ++i)
printf("%s\n",str[i]);
return 0;
}



转载于:https://www.cnblogs.com/E-star/archive/2012/02/28/2372419.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值