1

入力

入力は、任意の数のフィールドで構成されます。各フィールドの最初の行には、それぞれフィールドの行数と列数を表す 2 つの整数 n と m (0 < n,m <= 100) が含まれます。次の n 行には正確に m 文字が含まれており、フィールドを表しています。各セーフ スクエアは「.」で表されます。文字 (引用符なし) であり、各鉱山の正方形は "*" 文字 (これも引用符なし) で表されます。n = m = 0 の最初のフィールド行は、入力の終わりを表し、処理されるべきではありません。

出力

フィールドごとに、次のメッセージを 1 行だけ出力する必要があります。

フィールド #x: x はフィールドの番号 (1 から始まる) を表します。次の n 行には、「.」を含むフィールドが含まれている必要があります。文字は、そのマスに隣接する地雷の数に置き換えられます。フィールド出力間に空行が必要です。

サンプル入力

4 4

*...

....

.*..

....

3 5

**...

.....

.*...

0 0

サンプル出力

Field #1:

*100

2210

1*10

1110


Field #2:

**100

33200

1*100

指定された入力に対して正しい出力が得られます。

import java.util.*;

public class Main{

    public static void main(String[] args) {
        //field size
        int n, m;
        //string to hold a row of a minesweeper board
        String line;
        //array to hold all the minesweeper boards entered
        ArrayList<char[][]> allBoards = new ArrayList<char[][]>();

        Scanner scan = new Scanner(System.in);

        //get the field size
        n = scan.nextInt();
        m = scan.nextInt();

        //keep going until n=0 and m=0
        while ((n+m)!=0) {

            //create the minesweeper board
            //the field sizes are 2 spaces bigger to prevent error checking 
            //at the edges of the minesweeper board            
            char[][] board = new char[n + 2][m + 2];

            //fill the appropriate spaces with the mines '*' and blank spaces '.'
            for (int row = 1; row < board.length - 1; row++) {
                line = scan.next();
                for (int col = 1; col < board[0].length - 1; col++) {
                    board[row][col] = line.charAt(col - 1);
                }
            }

            //add the current minesweeper board to the array
            allBoards.add(board);

            //get new field size
            n = scan.nextInt();
            m = scan.nextInt();
        }

        printResults(allBoards);
    }

    //function to find out how many mines are around a certain position
    //check all positions surrounding the current one.
    public static int getMines(char[][] board, int row, int col) {
        int nMines = 0;

        if (board[row - 1][col - 1] == '*') {
            nMines++;
        }

        if (board[row - 1][col] == '*') {
            nMines++;
        }

        if (board[row - 1][col + 1] == '*') {
            nMines++;
        }

        if (board[row][col - 1] == '*') {
            nMines++;
        }

        if (board[row][col + 1] == '*') {
            nMines++;
        }

        if (board[row + 1][col - 1] == '*') {
            nMines++;
        }

        if (board[row + 1][col] == '*') {
            nMines++;
        }

        if (board[row + 1][col + 1] == '*') {
            nMines++;
        }

        return nMines;
    }

    //print the results
    private static void printResults(ArrayList<char[][]> allBoards) {
        for (int i = 1; i <= allBoards.size(); i++) {
            System.out.println("Field #" + i + ":");
            for (int row = 1; row < allBoards.get(i - 1).length - 1; row++) {
                for (int col = 1; col < allBoards.get(i - 1)[0].length - 1; col++) {
                    if (allBoards.get(i - 1)[row][col] != '*') {
                        System.out.print(getMines(allBoards.get(i - 1), row, col));
                    } else {
                        System.out.print("*");
                    }
                }
                System.out.println();
            }
            System.out.println();
        }
    }
}
4

0 に答える 0