这是道简单的模拟题,直接模拟过程便可,关键是找到点的坐标与对应格子的关系。
代码:
#include<stdio.h> #include<string.h> int main() { char ch[33][33],d; int i,j,x,y,k,n; scanf("%d",&n); k=0; while(n--) { scanf("%d%d",&x,&y); for (i=1;i<=32;i++) for (j=1;j<=32;j++) ch[i][j]='.'; scanf("%c",&d); while(d!='.') { if (d=='E') { x++; ch[32-y+1][x]='X'; } if (d=='N') { y++; ch[32-y+1][x+1]='X'; } if (d=='W') { ch[32-y][x]='X'; x--; } if (d=='S') { ch[32-y+1][x]='X'; y--; } scanf("%c",&d); } k++; printf("Bitmap #%d\n",k); for (i=1;i<=32;i++) { for (j=1;j<=32;j++) printf("%c",ch[i][j]); printf("\n"); } printf("\n"); } return 0; }
但是有一点很奇怪,为什么将以上程序定义的字符数组ch[33][33]改为ch[32][32],
当然其他内容相应地改变,而且也AC了,不过耗时增加了。
前者是:
后者是:
希望大神可以帮我解答一下,谢谢!
改后代码:
#include<stdio.h> #include<string.h> int main() { char ch[32][32],d; int i,j,x,y,k,n; scanf("%d",&n); k=0; while(n--) { scanf("%d%d",&x,&y); for (i=0;i<=31;i++) for (j=0;j<=31;j++) ch[i][j]='.'; scanf("%c",&d); while(d!='.') { if (d=='E') { ch[31-y+1][x]='X'; x++; } if (d=='N') { y++; ch[31-y+1][x]='X'; } if (d=='W') { ch[31-y][x-1]='X'; x--; } if (d=='S') { ch[31-y+1][x-1]='X'; y--; } scanf("%c",&d); } k++; printf("Bitmap #%d\n",k); for (i=0;i<=31;i++) { for (j=0;j<=31;j++) printf("%c",ch[i][j]); printf("\n"); } printf("\n"); } return 0; }
题目来源:http://poj.org/problem?id=1132