水题,读懂题,注意格式(不是第一组数据的就在输入与输出之间加空行),一遍A。
AC代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char grid[15][15]; int a,b,i,j,k,t=0,n[15][15]; while(scanf("%d",&a)&&a!=0) { scanf("%d",&b); getchar(); for (i=0;i<a;i++) gets(grid[i]); k=0; memset(n,0,sizeof(n)); for (i=0;i<a;i++) for (j=0;j<b;j++) { if (i==0&&grid[i][j]!='*') n[i][j]=++k; else if (j==0&&grid[i][j]!='*') n[i][j]=++k; else if (grid[i][j-1]=='*'&&grid[i][j]!='*') n[i][j]=++k; else if (grid[i-1][j]=='*'&&grid[i][j]!='*') n[i][j]=++k; } if (t) putchar('\n'); printf("puzzle #%d:\nAcross\n",++t); for (i=0;i<a;i++) for (j=0;j<b;j++) { if (n[i][j]&&(j==0||grid[i][j-1]=='*')) { printf("%3d.",n[i][j]); for (k=j;k<b&&grid[i][k]!='*';k++) putchar(grid[i][k]); putchar('\n'); } } printf("Down\n"); for (i=0;i<a;i++) for (j=0;j<b;j++) { if (n[i][j]&&(i==0||grid[i-1][j]=='*')) { printf("%3d.",n[i][j]); for (k=i;k<a&&grid[k][j]!='*';k++) putchar(grid[k][j]); putchar('\n'); } } } return 0; }