TyvjBegin 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.
 

以前一直剩一个点没AC的题,心血来潮检查一下一眼发现一开始数组少开一点点(本来是[0..2000,0..2000])就对2000的不适合了。。改过来立刻AC。。

原文地址:https://www.cnblogs.com/yachen/p/1945828.html