Nguồn đề bài: http://www.spoj.com/PTIT/problems/BCBOM/
Nội dung bài viết
1. Đề bài BCBOM spoj PTIT
Trong trò chơi dò mìn, người ta cho trước một ma trận cấp n*m trong đó có một số quả mìn ở các vị trí nào đó. Nhiệm vụ của người chơi là xác định vị trí của các quả mìn này dựa trên các ô xung quanh.
Trong bài này, bạn hãy viết chương trình chuyển từ ma trận n*m mô tả vị trí các quả mìn và các ô trống thành một ma trận khác trong đó với mỗi ô trống sẽ xác định xem có bao nhiêu quả mìn kề với nó.
Input: Có nhiều bộ test, mỗi bộ test bắt đầu bằng 2 số nguyên n và m (1<=n,m<=100). Tiếp theo đó là ma trận cấp n*m trong đó vị trí có mìn đánh dấu bởi ký tự * còn không có là dấu chấm (.). Dòng cuối cùng của file Input chứa hai giá trị 0.
Output: Với mỗi bộ test, in ra màn hình ma trận tương ứng trong đó các vị trí có dấu chấm được thay bằng một số nguyên cho biết số quả mìn kề với ô đó.
Example
Input:
3 2
..
.*
..
5 5
*.*.*
..*..
*****
…..
..**.
0 0
Output:
11
1*
11
*3*3*
36*63
*****
24553
01**1
2. Gợi ý BCBOM spoj PTIT
Bài này không có gì khó, chỉ việc đếm các ô xung quanh, chủ yếu bạn phải cẩn thận các bước khởi tạo cũng như cách duyệt sao cho hợp lí thôi.
3. code tham khảo BCBOM spoj PTIT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | const fi=''; nmax=100; type data=longint; var f:text; A,B:array[0..nmax+1,0..nmax+1] of char; n,m:data; function dem(u,v:data):data; var i,j:data; begin dem:=0; for i:=u-1 to u+1 do for j:=v-1 to v+ 1 do if a[i,j]='*' then inc(dem); end; procedure xuli; var i,j:data; begin for i:=1 to m do for j:=1 to n do if a[i,j]='.' then b[i,j]:=chr(dem(i,j)+48) else b[i,j]:='*'; for i:=1 to m do begin for j:=1 to n do write(b[i,j]); writeln; end; end; procedure docfile; var i,j:data; begin assign(f,fi); reset(f); repeat readln(f,m,n); if (m=0) and (n=0) then break; fillchar(a,sizeof(a),'.'); for i:=1 to m do begin for j:=1 to n do read(f,a[i,j]); readln(f); end; xuli; until false; close(f); end; begin docfile; end. |
Bài viết liên quan
- Spoj PTIT PTIT016C – ACM PTIT 2016 C – Chẵn lẻ
- P156SUME spoj PTIT – ROUND 6E – Ước chung của chuỗi
- P156PROE spoj PTIT – ROUND 6E – Phép dịch
- P156SUMH spoj PTIT – ROUND 6H – Kim cương
- BCTHIDAU spoj PTIT – Thi đấu
- BCLUCKY1 spoj PTIT – Số gần may mắn
- P153PROI PTIT spoj – Mã hóa xâu
- FINDCOW PTIT spoj – Find the Cow!
- REMOVBIT PTIT spoj- xóa BIT
- P167PROE spoj PTIT – ROUND 7E – Phương trình