水题,注意各组数据之间一个空行,前后没有空行
#include<stdio.h>
#include<string.h>char s[20][20];
int b[20][20];
int a[20][20];
int main()
{
int r,c,i,j,k,n,maxn=1,ens=0;
while(scanf("%d",&r)!=EOF&&r)
{
scanf("%d",&c);
for(i=0;i<r;i++)
scanf("%s",s[i]);
memset(b,0,sizeof(b));
memset(a,0,sizeof(a));
int ans=1;
for(i=0;i<r;i++)
for(j=0;j<c;j++)
{
if(s[i][j]!='*'){
if(i==0||j==0)
a[i][j]=b[i][j]=ans++;
else{
if(s[i-1][j]=='*'||s[i][j-1]=='*')
a[i][j]=b[i][j]=ans++;
}
}
}
if(ens==0)
ens=1;
else
printf("\n");
printf("puzzle #%d:\n",maxn++);
printf("Across\n");
for(i=0;i<r;i++)
for(j=0;j<c;j++){
if(b[i][j]!=0){
printf("%3d.",b[i][j]);
for(k=j;k<c;k++)
if(s[i][k]!='*'){
printf("%c",s[i][k]);
b[i][k]=0;
if(k==c-1)
printf("\n");
}
else{
printf("\n");
break;
}
}
}
printf("Down\n");
for(i=0;i<r;i++)
for(j=0;j<c;j++)
{
if(a[i][j]!=0){
printf("%3d.",a[i][j]);
for(n=i;n<r;n++)
if(s[n][j]!='*')
{
printf("%c",s[n][j]);
a[n][j]=0;
if(n==r-1)
printf("\n");
}
else{
printf("\n");
break;
}
}
}
}
return 0;
}