题意简述
这题是POJ-2996的逆过程。给出棋盘描述,要求打印出棋盘。
具体的描述和棋盘格式见POJ-2996。
算法分析
这个比2996简单。也是直接模拟。
开一个二维数组存储8*8棋盘,读入一行后按”,”拆分,判断是3位还是2位,三位的话按第二三位定位点并存储第一位字符(注意根据黑白区分大小写),二位的话存储P。
最后按指定格式输出即可。
Problem Status: AC。时间0ms,内存388k
程序样例
#include<stdio.h>
#include<string.h>
void output(char a[8][8]) {
int i, j;
printf("+---+---+---+---+---+---+---+---+n");
for (i = 0; i < 8; i++) {
printf("|");
for (j = 0; j < 8; j++) {
if (a[i][j] == ' ')
if ((i + j) % 2 == 0) printf("...|");
else printf("::: |");
else
if ((i + j) % 2 == 0) printf(".%c.|", a[i][j]);
else printf(":%c: |", a[i][j]);
}
printf("n+---+---+---+---+---+---+---+---+n");
}
}
int main() {
char t[60];
char a[8][8];
int i, j;
for (i = 0; i < 64; i++) a[i / 8][i % 8] = ' ';
scanf("%s", t);
scanf("%s", t);
i = 0;
j = 0;
while (i < strlen(t)) {
while (t[j] != ',' && j < strlen(t)) j++;
if (j - i == 3)
a[8 - (t[i + 2] - '0')][t[i + 1] - 'a'] = t[i];
else
a[8 - (t[i + 1] - '0')][t[i] - 'a'] = 'P';
j++;
i = j;
}
scanf("%s", t);
scanf("%s", t);
i = 0;
j = 0;
while (i < strlen(t)) {
while (t[j] != ',' && j < strlen(t)) j++;
if (j - i == 3)
a[8 - (t[i + 2] - '0')][t[i + 1] - 'a'] = t[i] - 'A' + 'a';
else
a[8 - (t[i + 1] - '0')][t[i] - 'a'] = 'p';
j++;
i = j;
}
output(a);
system("pause");
return 0;
}
Leave a Reply