这道题我交了8 9次,终于ac。问题出在格式上:%03d;有了这个不用加空格了,开始03d没加就直接加两空格。QAQ
#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
int main()
{
int m,n,k=0;
while(cin>>m,m!=0)
{
cin>>n;
char s[11][11];
for(int i=0;i<m;i++)
cin>>s[i];
if(k++)cout<<endl;
int p=1;
int a[11][11];
memset(a,0,sizeof(a));
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(s[i][j]=='*')
continue;
if(s[i-1][j]=='*'||i-1<0||s[i][j-1]=='*'||j-1<0)
{
a[i][j]=p++;
}
}
}
cout<<"puzzle #"<<k<<":"<<endl;
cout<<"Across"<<endl;
for(int i=0;i<m;++i) //横向处理Across
{
int j=0;
while(j<n)
{
if(a[i][j] == 0 || s[i][j] =='*')
{
j++;
continue;
}
printf("%3d.%c",a[i][j],s[i][j]);
j++;
while(j<n && s[i][j]!='*')
{
printf("%c",s[i][j]);
j++;
}
printf("\n");
}
}
cout<<"Down"<<endl;
for(int i=0;i<m;++i) //纵向处理Down
{
for(int j=0;j<n;++j)
{
if(a[i][j] == 0 || s[i][j]=='*')
continue;
printf("%3d.%c",a[i][j],s[i][j]);
a[i][j]=0;
int l=i+1;
while(l<m && s[l][j]!='*')
{
printf("%c",s[l][j]);
a[l][j]=0;
l++;
}
printf("\n");
}
}
}
return 0;
}