【PTA】扫雷游戏

请添加图片描述
个人名片:

博主酒徒ᝰ.
个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
专栏PTA习题及解析
介绍记录了博主在pta学习练题

请添加图片描述

前言

1.简介

“PTA程序设计类实验辅助教学平台”是由浙江大学主导,杭州百腾教育科技有限公司管理运营,全国高校教师共同建设的程序设计类课程的辅助教学平台。目前,全国538所高校参与,3152位教师共同建设出66095道高质量题目,学生注册用户已达136万;共有14类固定题目集(涵盖C语言、JAVA语言、Python语言、数据结构、数据库系统和中国高校计算机大赛题库等方面)和55类专业课程题目集(涵盖计算机类、电子类、文学类、外语类及华为认证)。包含判断题、填空题、单选题、多选题、程序填空题、函数题、编程题、主观题、多文件编程题和SQL编程题10种题目类型。

2.优点

  • 支持20万人同时在线
  • 支持多种题型
  • 支持多种判题模式
  • 为教学质量提供全方位保障
  • 即时的答疑系统

一、题目

玩过扫雷游的朋友都知道,该游戏的目标是找出一个nm矩阵内的所有的地雷,在本题中,你需要为每一个单元格统计出它周围地雷的个数,每个单元格最多有8个相邻单元格,如下图,44 的格子里,用“*”表示雷,用“^” 表示没有雷。
在这里插入图片描述

计算后的输出结果为:

*100

2210

1*10

1110

输入格式:
输入包含若干个矩阵,对于每一个矩阵,第一行包含两个数M和N,分别表示该矩阵的行数和列数(0<N,M<100),接下来N行包含M个字符,就是该矩阵,用“*”表示地雷,用“^”表示空白。当N=M=0时,表示结束,不用处理该行。

输出格式:
对于每一个矩阵,首先在单独一行打印出矩阵序号:Field #X: 其中X是矩阵的编号,从1开始编号,接下来N行中,读入的“^”用该位置周围的地雷数目所代替,地雷处,仍用“*”表示。输出相邻的两个矩阵之间,空一行。

输入样例:
在这里给出一组输入。例如:
在这里插入图片描述

输出样例:
在这里给出相应的输出。例如:

Field #1:
100
2210
1
10
1110

Field #2:
324310
420
2
5641
23
6**1
2
3431
334531
23
5**1
1
33**31

代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB

二、代码

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();
    }
}

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值