我喜欢这种脑残的数组遍历题。。。
#include<cstdio>
#include<cstdlib>
#include<cstring>
int main(void)
{
int m,n,count = 0;
int map[110][110];
while(scanf("%d %d",&m,&n) == 2)
{
memset(map,0,sizeof(map));
if(m == 0&& n == 0) break;
if(count) printf("\n");
count ++;
int i = 0,j = 0;
for(i = 1;i <= m;i++)
{
getchar(); //scanf()以Enter结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);这种小错误老是犯。。
for(j = 1;j <= n;j++)
scanf("%c",&map[i][j]);
}
for(i = 1;i <= m; i ++)
for(j = 1;j <= n; j ++)
{
if(map[i][j] == '.')
{
map[i][j] = 0;
for(int k = i-1;k <= i+1;k ++)
for(int l = j-1; l<= j+1; l++)
{
if(map[k][l] =='*')
map[i][j]++;
}
}
}
printf("Field #%d:\n",count);
for(i = 1;i <= m; i++)
{
for(j = 1;j <= n;j++)
{
if(map[i][j] == '*')
printf("%c",map[i][j]);
else
printf("%d",map[i][j]);
}
printf("\n");
}
}
return 0;
}
zoj-1015
#include<stdio.h>
int main(){
int i,g,N,n,j,k,f,t,d[20];
int c[22][22] = {0};
int a[22][22] = {0};
scanf("%d",&N);
while(N--)
{ getchar(); scanf()以Enter结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);
/* 第一次输入会流下来一个\n 造成下一次的读写少一次*/
scanf("%d",&n);
for(t = 0;t<=15;t++){
scanf("%d",&d[t]);
}
for(g = 1;g<=20;g++){
getchar();
for(f = 1;f<=20;f++){
scanf("%d",&a[g][f]);
}
}
for(k = 1;k<=n;k++)
{
for(g = 1;g<=20;g++)
{
for(f = 1;f<=20;f++)
{
c[g][f] = a[g][f-1]+a[g][f+1]+a[g-1][f]+a[g+1][f]+a[g][f];
}
}
for(g = 1;g<=20;g++)
{
for(f = 1;f<=20;f++)
{
t = c[g][f];
a[g][f] = a[g][f]+d[t];
if(a[g][f]<0)
a[g][f] = 0;
if(a[g][f]>3)
a[g][f] = 3;
}
}
}
for(g = 1;g<=20;g++){
for(f = 1;f<=20;f++){
if(a[g][f]==0)
printf(".");
if(a[g][f]==1)
printf("!");
if(a[g][f]==2)
printf("X");
if(a[g][f]==3)
printf("#");
}
printf("\n");
}
if(j!=N)
printf("\n");
getchar();
}
return 0;
}