【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 螺旋矩阵填数(100分) - 三语言AC题解(Python/Java/Cpp)

news2024/11/24 11:48:11

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

https://app5938.acapp.acwing.com.cn/contest/2/problem/OD1084

🌍 评测功能需要 ⇒ 订阅专栏 ⇐ 后私信联系清隆解锁~

🍓OJ题目截图

在这里插入图片描述

文章目录

    • 📎在线评测链接
    • 🍓OJ题目截图
    • ⏰ 螺旋矩阵填数
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入 1
      • 样例输出 1
      • 样例解释 1
      • 样例输入 2
      • 样例输出 2
      • 数据范围
      • 题解
      • 参考代码

⏰ 螺旋矩阵填数

问题描述

LYA 小姐最近在家无聊时发明了一种填数游戏。给定一个矩阵的行数 m m m 和需要填入的数字个数 n n n,从矩阵的左上角开始,按顺时针螺旋的方式依次填入从 1 1 1 开始的连续正整数。矩阵需要满足以下要求:

  1. 每行数字的个数相同。
  2. 列数尽可能少。
  3. 优先填充矩阵的外圈。
  4. 如果数字不够填充完整个矩阵,则使用单个星号 * 占位。

输入格式

输入为一行,包含两个用空格分隔的正整数 n n n m m m,分别表示需要填入的数字个数和矩阵的行数。

输出格式

输出为一个矩阵,每行元素之间用单个空格分隔,最后一行无多余空格。

样例输入 1

9 4

样例输出 1

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

样例解释 1

给定 9 9 9 个数字和 4 4 4 行,按要求填充矩阵。

样例输入 2

3 5

样例输出 2

1
2 
3
*
*

数据范围

  • 1 ≤ n , m ≤ 999 1 \le n, m \le 999 1n,m999

题解

我们可以使用一个二维数组来模拟矩阵,初始时将所有元素填充为 *。然后从左上角开始,按顺时针螺旋的方式依次填入数字。当遇到边界或已填充的元素时,改变方向继续填充。填充完成后,输出矩阵即可。

参考代码

  • Python
def soln(n, m):
    matrix = [['*' for _ in range(max((n - 1) // m + 1, 1))] for _ in range(m)]
    dx, dy = [0, 1, 0, -1], [1, 0, -1, 0]
    x, y, d = 0, 0, 0
    for i in range(1, n + 1):
        matrix[x][y] = str(i)
        nx, ny = x + dx[d], y + dy[d]
        if nx < 0 or nx >= m or ny < 0 or ny >= len(matrix[0]) or matrix[nx][ny] != '*':
            d = (d + 1) % 4
            nx, ny = x + dx[d], y + dy[d]
        x, y = nx, ny
    return [' '.join(row) for row in matrix]

n, m = map(int, input().split())
print('\n'.join(soln(n, m)))
  • Java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int cols = Math.max((n - 1) / m + 1, 1);
        String[][] matrix = new String[m][cols];
        for (String[] row : matrix) {
            Arrays.fill(row, "*");
        }

        int[] dx = {0, 1, 0, -1};
        int[] dy = {1, 0, -1, 0};
        int x = 0, y = 0, d = 0;
        for (int i = 1; i <= n; i++) {
            matrix[x][y] = Integer.toString(i);
            int nx = x + dx[d], ny = y + dy[d];
            if (nx < 0 || nx >= m || ny < 0 || ny >= cols || !"*".equals(matrix[nx][ny])) {
                d = (d + 1) % 4;
                nx = x + dx[d];
                ny = y + dy[d];
            }
            x = nx;
            y = ny;
        }

        for (String[] row : matrix) {
            System.out.println(String.join(" ", row));
        }
    }
}
  • Cpp
#include <iostream>
#include <vector>
#include <string>

using namespace std;

vector<string> soln(int n, int m) {
    vector<vector<string>> matrix(m, vector<string>(max((n - 1) / m + 1, 1), "*"));
    int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
    int x = 0, y = 0, d = 0;
    for (int i = 1; i <= n; i++) {
        matrix[x][y] = to_string(i);
        int nx = x + dx[d], ny = y + dy[d];
        if (nx < 0 || nx >= m || ny < 0 || ny >= matrix[0].size() || matrix[nx][ny] != "*") {
            d = (d + 1) % 4;
            nx = x + dx[d];
            ny = y + dy[d];
        }
        x = nx;
        y = ny;
    }
    vector<string> result;
    for (const auto& row : matrix) {
        string line;
        for (const auto& elem : row) {
            line += elem + " ";
        }
        line.pop_back();
        result.push_back(line);
    }
    return result;
}

int main() {
    int n, m;
    cin >> n >> m;
    vector<string> result = soln(n, m);
    for (const auto& line : result) {
        cout << line << endl;
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1873985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小阿轩yx-Nginx 网站服务

小阿轩yx-Nginx 网站服务 由俄罗斯的 lgor Sysoev 开发其稳定、高效的特性逐渐被越来越多的用户认可 Nginx 服务基础 Nginx (发音为[engine x])专为性能优化而开发 最知名的优点 稳定性低系统资源消耗以及对 HTTP 并发连接的高处理能力(单台物理服务器可支持 30000~50000个…

Electron录制应用-打包静态文件问题【命令行ffmpeg导不出视频】

问题描述 在开发环境下,所有功能都运行正常,但一旦进行打包并运行生产环境的版本,导出mp4视频的功能就失效了。没有文件生成,也没有任何错误提示。 排查问题 为了找到问题的根源,我首先决定通过日志来追踪。我使用了winston和winston-daily-rotate-file这两个强大的日志…

南昌服务器托管让数据存储更安全

南昌&#xff0c;作为长江中游地区的重要中心城市&#xff0c;近年来经济发展迅速&#xff0c;产业结构不断优化。随着大数据、云计算、人工智能等新一代信息技术的快速发展&#xff0c;南昌的信息化建设步伐不断加快&#xff0c;为企业提供了良好的发展环境。在这样的背景下&a…

【算法】单调队列 - 基础与应用-滑动窗口最大值

题目 给定一个数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 思路 暴力&#xff1a;遍历一遍的过程中每次从窗口找到最大的数组&#…

【android 9】【input】【9.发送按键事件3——Inputchannel的创建过程】

系列文章 本人系列文章-CSDN博客 目录 系列文章 目录 1.简介 1.1 主要步骤 1.2 时序图 2.源码分析 2.1 WindowManagerImpl的addView 2.2 WindowManagerGlobal的addView 2.3 ViewRootImpl 2.4 getWindowSession 2.5 WMS中的openSession 2.6 Session 2.7 class W 2.…

ASUS/华硕幻14 2023 GA402X系列 原厂Windows11-22H2系统

安装后恢复到您开箱的体验界面&#xff0c;带原机所有驱动和软件&#xff0c;包括myasus mcafee office 奥创等。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http:…

Android 14 独立编译 Setting apk

我们在setting 目录下是用 mm 会报错。 所以应该在 源码主目录 采用 make Settings 进行编译 很多时候如果在apk 目录下 mm 单独编译会出错&#xff0c; 都可以才用这种方式进行编译。

【51单片机入门】点亮数码管

文章目录 前言仿真图如何去绘制一个数字示例代码选择某个数码管显示某个数字 示例代码总结 前言 在嵌入式系统的世界中&#xff0c;单片机扮演着至关重要的角色。51单片机&#xff0c;作为最早的微控制器之一&#xff0c;至今仍被广泛应用在各种设备中。本文将介绍如何使用51单…

FTP 文件传输协议:概念、工作原理;上传下载操作步骤

目录 FTP 概念 工作原理 匿名用户 授权用户 FTP软件包 匿名用户上传下载实验步骤 环境配置 下载 上传 wget 授权用户上传下载步骤 root用户登录FTP步骤 监听 设置端口号范围 修改用户家目录 匿名用户 授权用户 FTP 概念 FTP&#xff08;File Transfer Prot…

如何保护应用?可快速部署的WAF服务器分享

Web应用攻击是安全事件和数据泄露的主要原因。相关统计表明&#xff0c;超过四分之三的网络犯罪直指应用及其漏洞。为保护数量日益增长的应用安全&#xff0c;Web应用防火墙(WAF)因此而生。本文则聚焦于WAF服务器&#xff0c;了解它的性能与具体的实践应用。   新加坡网络安全…

鸿蒙HarmonyOS自定义组件开发和使用

自定义组件的介绍 在开发和使用自定义组件直接&#xff0c;我们需要了解什么是自定义组件&#xff1f; 在ArkUI中&#xff0c;UI显示的内容均为组件&#xff0c;由框架直接提供的称为系统组件&#xff0c;由开发者定义的称为自定义组件。在进行 UI 界面开发时&#xff0c;通常…

scatterlist的相关概念与实例分析

概念 scatterlist scatterlist用来描述一块内存&#xff0c;sg_table一般用于将物理不同大小的物理内存链接起来&#xff0c;一次性送给DMA控制器搬运 struct scatterlist {unsigned long page_link; //指示该内存块所在的页面unsigned int offset; //指示该内存块在页面中的…

CentOS7环境下DataX的安装、使用及问题解决

DataX概述 DataX 是阿里巴巴开源的一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 为了解决异构数据源同步问题&#xff0c;DataX将复杂的网状的同步链路变…

SAP PP学习笔记24 - 生产订单(制造指图)的创建

上面两章讲了生产订单的元素。 SAP PP学习笔记22 - 生产订单&#xff08;制造指图&#xff09;的元素1-CSDN博客 SAP PP学习笔记23 - 生产订单&#xff08;制造指图&#xff09;的元素2 - 决济规则(结算规则)-CSDN博客 这一章讲生产订单的创建。比如 - 生产订单的流程&#…

端口扫描攻击检测及防御方案

端口扫描数据一旦落入坏人之手&#xff0c;可能会成为更大规模恶意活动的一部分。因此&#xff0c;了解如何检测和防御端口扫描攻击至关重要。 端口扫描用于确定网络上的端口是否开放以接收来自其他设备的数据包&#xff0c;这有助于网络安全团队加强防御。但恶意行为者也可以…

ETAS工具导入DEXT生成Dcm及Dem模块(一)

文章目录 前言Cfggen之前的修改ECU关联DcmDslConnectionDiagnostic ProtocolDiagnostic Ecu Instance PropsCommonContributionSetEvent修改communication channel总结前言 诊断模块开发一般是先设计诊断数据库,OEM会释放对应的诊断数据库,如.odx文件或.cdd文件。如果OEM没有…

博士最多8年?硕士6年清退?教育局可没这么说!

哈哈哈&#xff0c;教育部可没说过博士最多八年&#xff0c;教育部说的是 博士研究生教育的最长修业年限&#xff0c;一般为6-8年 并且 对于“因研究未结束而无法正常毕业的博士”&#xff0c;目前高校可以按规定统筹利用科研经费、学费收入、社会捐助等资金&#xff0c;设…

使用minio搭建oss

文章目录 1.minio安装1.拉取镜像2.启动容器3.开启端口1.9090端口2.9000端口 4.访问1.网址http://:9090/ 5.创建一个桶 2.minio文件服务基本环境搭建1.创建一个文件模块2.目录结构3.配置依赖3.application.yml 配置4.编写配置类MinioConfig.java&#xff0c;构建minioClient5.Fi…

【Python】已解决:Python正确安装文字识别库EasyOCR

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;Python正确安装文字识别库EasyOCR 一、分析问题背景 在使用Python进行图像处理和文字识别时&#xff0c;EasyOCR是一个流行的库&#xff0c;它基于PyTorch&…

一大波客户感谢信来袭,感谢认可!

“自美的置业数据中台项目启动以来&#xff0c;贵公司实施团队与服务运营始终以专业、敬业、合作的态度扎根用户、服务用户、与用户共成长。在此&#xff0c;我司表示由衷的感谢&#xff01;” 这是携手美的置业以来&#xff0c;我们收到的第二封客户感谢信。 △ 以上为美的置…