1. 程式人生 > >JavaStudy——0086:掃雷遊戲地雷數計算

JavaStudy——0086:掃雷遊戲地雷數計算

總時間限制: 1000ms 記憶體限制: 65536kB

描述
掃雷遊戲是一款十分經典的單機小遊戲。它的精髓在於,通過已翻開格子所提示的周圍格地雷數,來判斷未翻開格子裡是否是地雷。
現在給出n行m列的雷區中的地雷分佈,要求計算出每個非地雷格的周圍格地雷數。
注:每個格子周圍格有八個:上、下、左、右、左上、右上、左下、右下。

輸入
第一行包含兩個整數n和m,分別表示雷區的行數和列數。1 <= n <= 100, 1 <= m <= 100。
接下來n行,每行m個字元,‘’表示相應格子中是地雷,‘?’表示相應格子中無地雷。字元之間無任何分隔符。
輸出
n行,每行m個字元,描述整個雷區。若相應格中是地雷,則用‘

’表示,否則用相應的周圍格地雷數表示。字元之間無任何分隔符。

樣例輸入

3 3
*??
???
?*?

樣例輸出

*10
221
1*1

Accepted程式碼

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        char[][] a=new char[101][101];
        int[] X=new int[]{-1,-1,-1,
0,1,1,1,0}; int[] Y=new int[]{-1,0,1,1,1,0,-1,-1}; int s,r,c; int n=in.nextInt(); int m=in.nextInt(); for(int i=0;i<n;i++) { String str=in.next(); a[i]=str.toCharArray(); } for(int i=0;i<n;i++) { for(int j=0;j<
m;j++) { if(a[i][j]=='*') System.out.print('*'); else { s=0; for(int k=0;k<8;k++) { r=i+X[k]; c=j+Y[k]; int tmp; if(r>=0 && r<n && c>=0 && c<m &&a[r][c]=='*') tmp=1; else tmp=0; s+=tmp; } System.out.print(s); } } System.out.println(); } in.close(); } }