【备战秋招】每日一题:2023.05.17-华为(第一题)-方格音游

news/2024/7/20 17:18:47 标签: 华为, python, java, 算法, 华为od, 开发语言

为了更好的阅读体检,可以查看我的算法学习博客
在线评测链接:P1293

题目描述

塔子哥最近沉迷于设计一个二维平面音游。

在我们所给的例子里,假设有 24 24 24个方块,分为水平8个和垂直3个(如下表格所示)

当玩家点击一个亮起的方块时,它周围的所有方块都会高亮。为了实现这个互动功能,塔子哥提出了一个方块组的概念:一个方块的方块组是指在上下左右方向上紧挨着的所有方块和它自己。而且垂直方向上的方块是首尾相连的,但水平方向上的方块是首尾不连的。

比如,在 48 48 48个方块中,方块 0 0 0的方块组是“ 16 16 16 8 8 8 1 1 1 0 0 0”,方块 10 10 10的方块组是“ 2 2 2 9 9 9 18 18 18 11 11 11 10 10 10”,方块 23 23 23的方块组是“ 15 15 15 22 22 22 7 7 7 23 23 23”。如下图所示,为了方便理解,我们把最后一行方块复制一份到第一行,表示上下相连:

16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23
0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7
8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15
16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22 23 23 23

塔子哥想要当玩家点击某个方块时,这个方块的整个方块组都会亮起。为了实现这个互动功能,他想让你设计一个程序,它能实时得到某个方块的方块组。

输入描述

第一行输入为 3 3 3个正整数 H H H , V V V ( 1 ≤ H , V ≤ 256 ) (1\leq H,V \leq 256) (1H,V256) M M M ( 1 ≤ M < H × V ) (1 \leq M < H\times V ) (1M<H×V), H H H V V V 为方块盘的水平个数和垂直个数;

接下来 M M M 行,每一行输入一个方块的 I D ID ID ,方格 I D ID ID 0 0 0开始,不超过 H × V − 1 H\times V - 1 H×V1 如:

8 3 1
12

输出描述

输出对应的方格组,方格组内 I D ID ID 以空格分隔, I D ID ID从上方起始,逆时针排列,输入的方格 I D ID ID 放最后,如上例子对应的输出结果为:
4 4 4 11 11 11 20 20 20 13 13 13 12 12 12

样例

输入

12 4 1
21

输出

9 20 33 22 21

样例2

输入

16 4 2
0
21

输出

48 16 1 0
5 20 37 22 21

思路

是否构图

首先,我们发现只要给定 n n n m m m,那么一整张图就会被固定。因此,我们不需要尝试去构造整个图。

如何查询

对于每次对于给定 I D ID ID(数值记为 x x x),询问方块组,具体做法如下:

  • 我们发现垂直方向是首尾相连的,因此,我们可以利用 x − n x - n xn x + n x + n x+n分别表示 I D ID ID上方数值和 I D ID ID下方数值。然而,我们发现如果 x − n x-n xn小于0时,我们需要令 x − n x-n xn加上 n ∗ m n*m nm,如果 x + n x+n x+n大于等于 n ∗ m n*m nm,我们需要令 x + n x+n x+n减去 n ∗ m n*m nm。因此,为了简化操作,我们可以对于这两个数值都加上 n ∗ m n*m nm,再取余 n ∗ m n*m nm
  • 我们发现水平方向不是首位相连的,因此,我们只要判断 x − 1 x-1 x1 x + 1 x+1 x+1存不存在即可。

类似题目推荐

代码

CPP

#include <bits/stdc++.h>
using namespace std;
int n, m, k;
int main(){
    cin >> n >> m >> k;//输入
    for(int i = 0; i < k; i++){
        int x;
        cin >> x;//输入询问ID
        cout << (x - n + n * m) % (n * m) << " ";//输出ID上方的数字
        if(x % n != 0)cout << x - 1 << " ";//输出ID左方的数字
        cout << (x + n + n * m) % (n * m) << " ";//输出ID下方的数字
        if((x + 1) % n != 0)cout << x + 1 << " ";//输出ID右方的数字
        cout << x << endl; //输出ID
    }
}

python_107">python

python">n, m, k = map(int, input().split())#输入

for _ in range(k):
    x = int(input())#输入询问ID
    print((x - n + n * m) % (n * m), end=" ")#输出ID上方的数字
    if x % n != 1:
        print(x - 1, end=" ")#输出ID左方的数字
    print((x + n + n * m) % (n * m), end=" ")#输出ID下方的数字
    if (x + 1) % n != 0:
        print(x + 1, end=" ")#输出ID右方的数字
    print(x)#输出ID

Java

java">import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();//输入
        int m = scanner.nextInt();
        int k = scanner.nextInt();

        for (int i = 0; i < k; i++) {
            int x = scanner.nextInt();//输入询问ID
            System.out.print((x - n + n * m) % (n * m) + " ");//输出ID上方的数字
            if (x % n != 1) {
                System.out.print(x - 1 + " ");//输出ID左方的数字
            }
            System.out.print((x + n + n * m) % (n * m) + " ");//输出ID下方的数字
            if ((x + 1) % n != 0) {
                System.out.print(x + 1 + " ");//输出ID右方的数字
            }
            System.out.println(x);//输出ID
        }
    }
}

Go

package main

import "fmt"

func main() {
    var n, m, k int
    fmt.Scan(&n, &m, &k)//输入

    for i := 0; i < k; i++ {
        var x int
        fmt.Scan(&x)//输入询问ID
        fmt.Printf("%d ", (x-n+n*m)%(n*m))//输出ID上方的数字
        if x%n != 1 {
            fmt.Printf("%d ", x-1)//输出ID左方的数字
        }
        fmt.Printf("%d ", (x+n+n*m)%(n*m))//输出ID下方的数字
        if (x+1)%n != 0 {
            fmt.Printf("%d ", x+1)//输出ID右方的数字
        }
        fmt.Println(x)//输出ID
    }
}

Js

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.on('line', (line) => {
    const [n, m, k] = line.trim().split(' ').map(Number);//输入
    for (let i = 0; i < k; i++) {
        rl.on('line', (x) => {
            x = Number(x);//输入询问ID
            process.stdout.write(((x - n + n * m) % (n * m)) + ' ');//输出ID上方的数字
            if (x % n !== 1) {
                process.stdout.write((x - 1) + ' ');//输出ID左方的数字
            }
            process.stdout.write(((x + n + n * m) % (n * m)) + ' ');//输出ID下方的数字
            if ((x + 1) % n !== 0) {
                process.stdout.write((x + 1) + ' ');//输出ID右方的数字
            }
            console.log(x);//输出ID
        });
    }
});


题目内容均收集自互联网,如如若此项内容侵犯了原著者的合法权益,可联系我: (CSDN网站注册用户名: 塔子哥学算法) 进行删除。


http://www.niftyadmin.cn/n/1003939.html

相关文章

SpringBoot之4种自动注入

第1种不依赖任何框架 RestController public class HelloController {private final IService iService;public HelloController(final IService iService) {this.iService iService;} }第2种Autowired RestController public class HelloController {Autowiredprivate ISer…

【第2章】分析一下 Flink中的流执行模式和批执行模式

目录 1、什么是有界流、无界流 2、什么是批执行模式、流执行模式 3、怎样选择执行模式&#xff1f; 4、怎样配置执行模式&#xff1f; 1、什么是有界流、无界流 有界流&#xff1a; 数据流定义了开始位置和结束位置&#xff0c;对一个计算任务而言&#xff0c;在计算前所有…

Vue3 系列:vue-router

vue-router 版本为4的是为vue3准备的 如果是vue2 安装版本为vue-router3 1. 基础用法 // router -> index.js import { createRouter, createWebHistory } from "vue-router";let router createRouter({history: createWebHistory(),routes: [{path: "/l…

Java——《面试题——Zookeeper篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java…

编织魔法:探索Python字符串的奇幻世界

文章目录 前言什么是 python 字符串通过下标(索引)来访问字符串中的字符字符串的切片操作字符串常用的方法find() 查找子串index() 查找子串rfind() / rindex()count() 返回某个子串在字符串中出现的次数replace() 替换split() 按照指定字符分割字符串join() 用一个字符或者子串…

适合团队人数少,预算低的四种办公室类型

如果团队人数少且预算低&#xff0c;以下是一些在深圳比较适合租赁的办公室类型&#xff1a; 1. 联合办公空间&#xff1a;联合办公空间是一种灵活的办公模式&#xff0c;通常提供共享的办公环境和设施&#xff0c;如会议室、休息区、打印机等。这种模式的办公室租金通常较低&…

前端如何进行页面优化_如何优化前端页面

优化前端页面 1 .前期准备 1.1 首页命名为index.html / index.htm / index.php等。 1.2 需要制作404页面。 1.3 文件夹结构合理。 1.4 命名使用英文且有语义性的单词&#xff0c;并提供参考文档。 2 .结构 2.1 文件头部分 2.1.1 需要提供文档声明 2.1.2 设置utf-8的编…

JVM-垃圾回收-基础知识

基础知识 什么是垃圾 简单说就是没有被任何引用指向的对象就是垃圾。后面会有详细说明。 和C的区别 java&#xff1a;GC处理垃圾&#xff0c;开发效率高&#xff0c;执行效率低 C&#xff1a;手工处理垃圾&#xff0c;如果忘记回收&#xff0c;会导致内存泄漏问题。如果回…