题意简述
这题是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; }