水题,读懂题,注意格式(不是第一组数据的就在输入与输出之间加空行),一遍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;
}