Dayi Lin, Ph.D.

Staff Researcher, AI & Software Engineering

POJ-2993 解题报告

POJ

题意简述

这题是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

Your email address will not be published. Required fields are marked *