【PTA】マインスイーパゲーム

画像の説明を追加してください
個人名刺:

ブロガーアルコール依存症ᝰ。
個人プロフィール:ワインに酔いしれ、お酒で未来を切り拓く。
PTAの演習と分析
導入:ブロガーの練習問題をPTAに収録

画像の説明を追加してください

序文

1 はじめに

「PTAプログラミング実験補助教育プラットフォーム」は、浙江大学が主導し、杭州百騰教育技術有限公司が管理・運営し、全国の大学の教師が共同で構築したプログラミングコースの補助教育プラットフォームです。現在、全国の 538 の大学が参加し、3,152 人の教師が共同で 66,095 の質の高いトピックを作成し、登録学生数は 136 万人に達し、14 の固定トピック セット (C 言語、JAVA 言語、 Python 言語、データ構造、データベース システム) および中国大学コンピューター コンテストの質問バンク) と 55 の専門コースのトピック セット (コンピューター、エレクトロニクス、文学、外国語、Huawei 認定をカバー)。問題は正誤問題、穴埋め問題、多肢選択問題、多肢選択問題、プログラム穴埋め問題、関数問題、プログラミング問題、主観問題、マルチファイル プログラミングに関する質問と SQL プログラミングに関する質問。

2.利点

  • 同時に 200,000 人をオンラインでサポート
  • 複数の質問タイプをサポート
  • 多彩な判定モードに対応
  • 教育の質を包括的に保証する
  • 即時質問応答システム

1. トピック

マインスイーパをプレイしたことがある友人は、ゲームの目的が nm マトリックス内のすべての地雷を見つけることであることを知っています.この質問では、各セルの周りの地雷の数を数える必要があり、各セルには最大 8 つの隣接するセルがあります、下の図に示すように、44個のセルで、「*」は私のものを意味し、「^」は私のものではないことを意味します。
ここに画像の説明を挿入

計算された出力は次のとおりです。

*100

2210

1*10

1110

入力形式:
入力には複数の行列が含まれます. 各行列の最初の行には、行列の行数と列数をそれぞれ表す 2 つの数値 M と N が含まれ (0<N, M<100)、次の N 行にはM 文字、つまりマトリックスを含み、"*" は地雷、"^" は空白を表します。N=M=0 の場合は終了を意味し、行は処理されません。

出力形式:
各マトリックスについて、最初にマトリックスのシリアル番号を別の行に出力します: フィールド #X: ここで、X はマトリックスの番号で、1 から番号が付けられ、次の N 行では、読み取られた「^」が使用されます。地雷の数の代わりに、地雷の場所は引き続き「*」で表されます。隣接する 2 つの行列の出力の間に空白行があります。

サンプル入力:
これは一連の入力です。例えば:
ここに画像の説明を挿入

出力例:
対応する出力をここに示します。例えば:

フィールド #1:
100
2210
1
10
1110

フィールド #2:
324 310
4 20
2
56 41
23
6**1
2
34 31
334 531
23
5**1
1
33**31

コード長制限 16 KB
時間制限 400 ms
メモリ制限 64 MB

2.コード

import java.util.Scanner;


public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        int number = 0;
        int M = 1;
        int N = 1;
        while (M != 0 && N != 0){
    
    
            M = sc.nextInt();
            N = sc.nextInt();
            int[][] num = new int[M][N];
            String str;
            int sum = 0;
            for (int i = 0; i < M; i++) {
    
    
                str = sc.next();
                for (int j = 0; j < N; j++) {
    
    
                    num[i][j] = str.charAt(j);
                }
            }
            number++;
            if (M != 0 && N != 0 && number == 1){
    
    
                System.out.println("Field #" + number + ":");
            }else if (M != 0 && N != 0 && number != 1){
    
    
                System.out.println();
                System.out.println();
                System.out.println("Field #" + number + ":");
            }
            for (int i = 0; i < M; i++) {
    
    
                for (int j = 0; j < N; j++) {
    
    
                    if (num[i][j] == '*'){
    
    
                        System.out.print("*");
                    }else {
    
    
                        for (int k = i-1; k <= i+1; k++) {
    
    
                            for (int l = j-1; l <= j+1; l++) {
    
    
                                if (k >= M || l >= N || k < 0 || l < 0){
    
    
                                }else if (num[k][l] == '*'){
    
    
                                    sum++;
                                }
                            }
                        }
                        System.out.print(sum);
                        sum = 0;
                    }
                }
                if (i != M-1){
    
    
                    System.out.println();
                }
            }
        }
        System.out.println();
        System.out.println();
    }
}

おすすめ

転載: blog.csdn.net/m0_65144570/article/details/127115353