搞定之后发现是空间不够。因为一开始理解题目以为是最后把全部的矩阵输出,所以建立了三维数组,后来发现不用一起输出时也没有改,而且数组再大一些就会栈溢出,所以一直WA。
下面是正确的代码。
#include<stdio.h>
#include<memory.h>
#define MAX 100
int main()
{
int mine;
int field=1;
int b[MAX+2][MAX+2];
int n,m;
char a[MAX+2][MAX+2];
int i,j;
while(~scanf("%d%d",&m,&n))
{
if(m==0||n==0)
break;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
getchar();
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
scanf("%c",&a[i][j]);
getchar();
}
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
mine=0;
if(a[i][j]=='*')
{
b[i][j]=-1;
continue;
}
if(a[i-1][j-1]=='*')
mine++;
if(a[i-1][j]=='*')
mine++;
if(a[i-1][j+1]=='*')
mine++;
if(a[i][j-1]=='*')
mine++;
if(a[i][j+1]=='*')
mine++;
if(a[i+1][j-1]=='*')
mine++;
if(a[i+1][j]=='*')
mine++;
if(a[i+1][j+1]=='*')
mine++;
b[i][j]=mine+1;
}
if(field!=1)
printf("\n");
j=1;
printf("Field #%d:\n",field);
for(i=1;b[i][j]!=0;i++,j=1)
{
for(;b[i][j]!=0;j++)
{
if(b[i][j]==-1)
printf("*");
else
printf("%d",b[i][j]-1);
}
printf("\n");
}
field++;
}
return 0;
}
——————————————————————————————————————————————————————————————————————————————————————————————————————————————原文——————————————————————————————————————————
这道题卡更加久。
交叉的PE和WA。
教训:
1.最后一行如果没有说的话就不要是空行。
2.一般是输入之后接输出,不是最后全部一起输出。
3.因为WA的缘故最后程序复杂的不行,以后还是只有牺牲效率,多使用函数,模块化编程。
4.最后还是WA,但是和一个已经通过的CPP编的输出一样,所以不太清楚是什么原因,只有先过了,以后再来看解决没有。如果有好心人帮忙看看就太感谢了。
#include<stdio.h>
#define MAX 100
int main()
{
int mine;
int field=1;
int b[10][MAX+1][MAX+1]={0};
int n,m;
char a[MAX+1][MAX+1]={'0'};
int i,j;
while(~scanf("%d%d",&m,&n))
{
if(m==0||n==0)
break;
for(i=0;i<=m+1;i++)
for(j=0;j<=n+1;j++)
a[i][j]='0';
getchar();
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
scanf("%c",&a[i][j]);
getchar();
}
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
mine=0;
if(a[i][j]=='*')
{
b[field][i][j]=-1;
continue;
}
if(a[i-1][j-1]=='*')
mine++;
if(a[i-1][j]=='*')
mine++;
if(a[i-1][j+1]=='*')
mine++;
if(a[i][j-1]=='*')
mine++;
if(a[i][j+1]=='*')
mine++;
if(a[i+1][j-1]=='*')
mine++;
if(a[i+1][j]=='*')
mine++;
if(a[i+1][j+1]=='*')
mine++;
b[field][i][j]=mine+1;
}
if(field!=1)
printf("\n");
j=1;
printf("Field #%d:\n",field);
for(i=1;b[field][i][j]!=0;i++,j=1)
{
for(;b[field][i][j]!=0;j++)
{
if(b[field][i][j]==-1)
printf("*");
else
printf("%d",b[field][i][j]-1);
}
printf("\n");
}
field++;
}
return 0;
}