Tyvj-Begin P1031 Begin2 - Unit1 - 扫雷
背景 Background
这里是TYVJ-begin2系列的第一道,欢迎您的到来。
这个系列主要是帮助NOIP普及组的朋友在赛场上获得一个较好的成绩设计的一个配套题库
UNIT1主要是针对一些模拟题、简单的数据结构(栈和队列)、以及简单的高精度训练
共10道
描述 Description
小菜二白在用电脑的过程中突然发现Windows还有自带的游戏这下可把二白乐坏了。。可是新的问题随之而来。。就是二白不会玩儿。这不他又迷上扫雷了。来找你帮忙了。。
二白已经知道了雷(用‘*’表示)的分布地点了,。可是他却不知道其余地方的数字代表这什么。细心的你给他解释道:“点开的数字是几,则说明该数字旁边的8个位置中有几个雷”。
现在已知一个雷的分布图,而你的任务就是把他的数字图形计算出来。
例:
地雷分布 数字分布
0*0*0 1*2*1
00000 11211
00000 00000
(注意,地雷分布中,不光是以0来表示无地雷,其他数字都可以表示无地雷)
下面的就看你了。。。
输入格式 Input Format
第一行 两个整数n,m分别表示行数和列数。(0<n<2000,0<m<2000)
第二行到第N+1 行
输入雷的排布图0表示空地。*表示雷
输出格式 Output Format
N行,
雷的数字排布图。
样例输入 Sample Input
3 5
0*0*0
00000
00000
样例输出 Sample Output
1*2*1
11211
00000
时间限制 Time Limitation
1s
注释 Hint
不要想的太多!
来源 Source
tyvj原创
program b1031; var n,m,i,j,s:integer; a:array[0..2001,0..2001]of char; begin a[0,0]:='0'; readln (n,m); for i := 1 to n do begin a[0,i]:='0'; a[i,0]:='0'; end; for i := 1 to n do begin for j := 1 to m do read(a[i,j]); readln; end; for i := 1 to n do for j := 1 to m do begin if a[i,j] <> '*' then begin a[i,j]:='0'; if a[i-1,j]='*' then a[i,j]:=succ(a[i,j]); if a[i+1,j]='*' then a[i,j]:=succ(a[i,j]); if a[i,j-1]='*' then a[i,j]:=succ(a[i,j]); if a[i,j+1]='*' then a[i,j]:=succ(a[i,j]); if a[i+1,j+1]='*' then a[i,j]:=succ(a[i,j]); if a[i-1,j+1]='*' then a[i,j]:=succ(a[i,j]); if a[i+1,j-1]='*' then a[i,j]:=succ(a[i,j]); if a[i-1,j-1]='*' then a[i,j]:=succ(a[i,j]); end; end; for i := 1 to n do begin for j := 1 to m-1 do write (a[i,j]); writeln (a[i,m]); end; end.