题目大意:
扫雷游戏。。。输入“*”的分布,“.”号变成数字表示该数字周围的八个格子里面有几个“*”。
用二维字符串数组来储存输入的数据,然后从第一格开始数周围的格子的“*”个数。
附上代码:

1 #include<stdio.h> 2 int main() 3 { 4 int x,y,i,j,i2,j2,n=0; 5 while(1) 6 { 7 n++; 8 scanf("%d%d",&x,&y); 9 getchar(); 10 if(x==0&&y==0) break; 11 char a[x][y+1]; 12 for(i=0;i<x;i++)//输入数据 13 { 14 gets(a[i]); 15 } 16 for(i=0;i<x;i++) 17 { 18 for(j=0;j<y;j++)//前两个for循环表示从第一行的第一格开始,到最后一行的最后一格 19 { 20 if(a[i][j]=='.')//如果是“.” 21 { 22 a[i][j]='0';//先初始赋值为'0'字符 23 for(i2=i-1;i2<=i+1;i2++) 24 for(j2=j-1;j2<=j+1;j2++)//然后循环,周围的九格(包括它自己) 25 if(i2>=0&&i2<x&&j2>=0&&j2<y&&a[i2][j2]=='*') a[i][j]++;//条件是为了防止越界,如果是'*',计数加一 26 } 27 } 28 } 29 if(n!=1) printf("\n");//控制格式,题目要求每两个Field之间直接留一个空行 30 printf("Field #%d:\n",n); 31 for(i=0;i<x;i++)//输出 32 { 33 for(j=0;j<y;j++) 34 printf("%c",a[i][j]); 35 printf("\n"); 36 } 37 } 38 return 0; 39 }