The game shows a number in a square which tells you how many mines there are adjacent to that square. Each square has at most eight adjacent squares. The 4 x 4 field on the left contains two mines, each represented by a ``*'' character. If we represent the same field by the hint numbers described above, we end up with the field on the right:
Input
The input will consist of an arbitrary number of fields. The first line of each field contains two integers n and m ( 0 < n, m《=100) which stand for the number of lines and columns of the field, respectively. Each of the next n lines contains exactly m characters, representing the field.
Safe squares are denoted by ``.'' and mine squares by ``*,'' both without the quotes. The first field line where n = m = 0 represents the end of input and should not be processed.
Output
For each field, print the message Field #x: on a line alone, where x stands for the number of the field starting from 1. The next n lines should contain the field with the ``.'' characters replaced by the number of mines adjacent to that square. There must be an empty line between field outputs.
Sample Input
4 4 *... .... .*.. .... 3 5 **... ..... .*... 0 0
Sample Output
Field #1: *100 2210 1*10 1110 Field #2: **100 33200 1*100
这道题是水题,但是还是WA了两次。
额,第一次WA是因为把宽和高的范围看错了,看成8*8了
第二次因为漏看了一个条件导致的(已经再题中标红并且放大了)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char g[101][101];
int r[101][101];
int dir[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
int main()
{
freopen("c:\\in.txt","r",stdin);
int w, h, i, j,ii, jj, x ,y, cases = 0;
while (cin>>h>>w)
{
if (h==0 || w==0) break;
if (cases) printf("\n");
cases ++;
memset(g, 0, sizeof(g));
memset(r, 0, sizeof(r));
for (i=0; i<h; i++)
{
for (j=0; j<w; j++)
{
cin>>g[i][j];
}
}
for (i=0; i<h; i++)
{
for (j=0; j<w; j++)
{
if (g[i][j]=='*') r[i][j]=-1;
else
{
for (ii=0; ii<8; ii++)
{
y = i+dir[ii][0];
x = j+dir[ii][1];
if (x>=0 && x<w && y>=0 && y<h && g[y][x]=='*')
{
++r[i][j];
}
}
}
}
}
printf("Field #%d:\n",cases);
for (i=0; i<h; i++)
{
for (j=0; j<w; j++)
{
if (r[i][j]==-1) cout<<"*";
else printf("%d",r[i][j]);
}
printf("\n");
}
}
return 0;
}