要注意的是输出时的%3d,第一个puzzle#前不用回车
```javascript
#include <stdio.h>
#include <string.h>
char s[15][15];
int value[15][15];
int r,c;
int m=0,n=0;
int main()
{
int num=0;
int kin=0;
while(scanf("%d",&r)==1)
{
//printf("yes");
//break;
if(r==0)
break;
scanf("%d\n",&c);
num+=1;
for(int i=0;i<r;i++)
{
for(int o=0;o<c;o++)
{
// fgets(s[i],15,stdin);
s[i][o]=getchar();
}
getchar();
}
//OUT
//for(int k=0;k<r;k++)
// for(int z=0;z<c;z++)
// printf("%c",s[k][z]);
memset(value,0,sizeof(value));
int count=1;
kin++;
if(kin!=1)
printf("\n");
for(int j=0;j<r;j++)
for(int k=0;k<c;k++)
if((j==0||k==0||(s[j-1][k]=='*'||s[j][k-1]=='*'))&&s[j][k]!='*')
{
value[j][k]=count;
count++;
}
printf("puzzle #%d:\nAcross\n",num);
for(m=0;m<r;m++)
{
while(n<c)
{
if(s[m][n]!='*')
{
printf("%3d.",value[m][n]);
while(s[m][n]!='*'&&n<c)
{
printf("%c",s[m][n]);
n+=1;
}
printf("\n");
}
n++;
}
n=0;
}
m=0;
printf("Down\n");
int m1[15];
memset(m1,0,sizeof(m1));
for(m=0;m<r;m++)
{
while(n<c)
{
int m2=m;
if(s[m2][n]!='*'&&(m2>=m1[n]))
{
printf("%3d.",value[m2][n]);
while(s[m2][n]!='*'&&m2<r)
{
printf("%c",s[m2][n]);
m2+=1;
}
printf("\n");
m1[n]=m2;
}
n++;
}
n=0;
}
n=0;
m=0;
}
return 0;
}
```