华为OD机试 - 相同数字组成图形的周长 - 矩阵(Java 2023 B卷 100分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、Java算法源码
    • 五、效果展示
      • 1、输入
      • 2、输出

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

有一个64x64的矩阵,每个元素的默认值为0,现在向里面填充数字,相同的数字组成一个实心图形,如下图所示是矩阵的局部(空白表示填充0)。

二、输入描述

  1. 第一行输入N,表示N个图形,N > 0且N < 64x64
  2. 矩阵左上角单元格坐标记作(0,0),第一个数字表示行号,第二个数字表示列号
  3. 接下来是N行,每行第一个数是矩阵单元格填充的数字,后续每两个一组,表示填充该数字的单元格坐标
  4. 答题者无需考虑数据格式非法的场景,题目用例不考察数据格式
  5. 题目用例保证同一个填充值只会有一行输入数据

三、输出描述

  1. 一共输出N个数值,每个数值表示某一行输入表示图形的周长
  2. 输出顺序需和输入的隔行顺序保持一致,即第1个数是输入的第1个图形的周长,第2个数是输入的第2个图形的周长,以此类推。

四、Java算法源码

package com.guor.od;

import java.util.*;

public class OdTest {
    static int n = 64;
    static int[] dx = {-1, 0, 1, 0};
    static int[] dy = {0, 1, 0, -1};

    static int[][] arr2 = new int[n][n];

    static List<Integer> list = new ArrayList<>();

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // N个图形
        int N = Integer.parseInt(sc.nextLine());

        for (int i = 0; i < N; i++) {
            String[] line = sc.nextLine().split(" ");
            int first = Integer.parseInt(line[0]);
            list.add(first);
            for (int j = 1; j < line.length; j += 2) {
                int x = Integer.parseInt(line[j]);
                int y = Integer.parseInt(line[j + 1]);
                arr2[x][y] = first;
            }
        }

        // 周长之和
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (arr2[i][j] > 0) {
                    int value = arr2[i][j];
                    int res = 4;
                    for (int k = 0; k < 4; ++k) {
                        int nx = i + dx[k], ny = j + dy[k];
                        if (nx >= 0 && nx < n && ny >= 0 && ny < n && arr2[nx][ny] == value) {
                            res -= 1;
                        }
                    }
                    map.put(value, map.getOrDefault(value, 0) + res);
                }
            }
        }

        for (int i = 0; i < N; i++) {
            System.out.print(map.get(list.get(i)));
            if (i + 1 == N) {
                System.out.println();
            } else {
                System.out.print(" ");
            }
        }
    }
}

五、效果展示

1、输入

2
1 1 3 2 2 2 3 2 4 3 2 3 3 3 4 4 1 4 2 4 3 4 4 5 2 5 3
2 3 7 3 8 4 5 4 6 4 7 4 8 5 4 5 5 5 6 5 7 5 8 6 4 6 5 6 6 6 7 6 8 7 4 7 5 7 6 7 7 7 8

2、输出

18 20

华为OD机试 - 相同数字组成图形的周长 - 矩阵(Java 2023 B卷 100分)_第1张图片


下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,矩阵,java)