当前位置: 首页 > news >正文

华为OD机试 - 螺旋数字矩阵

1 题目描述

疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法:

给出数字个数 n (0 < n ≤ 999)和行数 m(0 < m ≤ 999),从左上角的 1 开始,按照顺时针螺旋向内写方式,依次写出2,3,…,n,最终形成一个 m 行矩阵。

小明对这个矩阵有些要求:

每行数字的个数一样多
列的数量尽可能少
填充数字时优先填充外部
数字不够时,使用单个 * 号占位

2 输入描述

两个整数,空格隔开,依次表示 n、m

3 输出描述

符合要求的唯一矩阵

4 用例

4.1 用例1

输入

9 4

输出

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

4.2 用例2

输入

3 5

输出

1
2
3
*
*

5 题目分析·

考点:这道题考的是对二维数组的使用。
解析:题目中比较容易钻牛角尖的描述是每行数字的个数一样多。这句实际上是矩阵的特点,可以忽略。读完题目,我们发现有两个问题需要解决

1. 确定矩阵的列数
2. 设计填充的算法

通过列的数量尽可能少这个需求,我们可以想到,最少的情况,即矩阵中填充的全都是数字。那么列数= 填充的数字个数n/行数向上取整。
然后是如何填充,这就涉及到了二维数组的螺旋形遍历。我们可以想象一个人在背包容量限制下,在顺时针绕圈捡东西,当不为0,则为已捡过,即换方向捡。

6 Java代码

根据5中的思路,我们可以写出如下代码(代码中给出了详细的注释):


public class SpiralMatrix {public static void main(String[] args) {//这里n和m可以修改为使用Scanner从控制台读取输入int n = 120;int m = 7;int columnCount=Math.ceilDiv(n,m);int[][] matrix = new int[m][columnCount];fillSpiral(matrix,n);for (int i = 0; i < m; i++) {for (int j = 0; j < columnCount; j++) {System.out.printf("%2s ", matrix[i][j] == 0 ? "*" : matrix[i][j]);}System.out.println();}}public static void fillSpiral(int[][] matrix, int total) {// 将要填充的数字,从1开始int num = 1;// 方向变量,四个元素分别表示:向右,向下,向左,向上int[][] directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};// 初始化方向变量的索引,0表示初始方向为向右int dir = 0;// 初始化行列索引int row = 0, col = 0;// 继续填充,直到所有的数字被填充完while (num <= total) {// 将数字填充到矩阵的当前位置,然后数字加1matrix[row][col] = num++;// 尝试按照当前方向去获取新的行列索引int newRow = row + directions[dir][0];int newCol = col + directions[dir][1];// 检查新的行列索引是否超出矩阵的边界,或者该位置已经被填充过// 如果是,则将方向变量的索引加1(取模为了形成循环:向右,向下,向左,向上)if (newRow < 0 || newRow >= matrix.length || newCol < 0 || newCol >= matrix[0].length || matrix[newRow][newCol] != 0) {dir = (dir + 1) % 4;}// 根据新的方向更新行列索引row += directions[dir][0];col += directions[dir][1];}}
}

相关文章:

华为OD机试 - 螺旋数字矩阵

1 题目描述 疫情期间&#xff0c;小明隔离在家&#xff0c;百无聊赖&#xff0c;在纸上写数字玩。他发明了一种写法&#xff1a; 给出数字个数 n &#xff08;0 < n ≤ 999&#xff09;和行数 m&#xff08;0 < m ≤ 999&#xff09;&#xff0c;从左上角的 1 开始&…...

Vue响应式内容丢失处理

对数组和对象进行不当的修改会使Vue的对象丢失响应式&#xff0c;这时可以直接console.log丢失的对象&#xff0c;看是否有getter和setter 对于数组和对象&#xff0c;只有使用 Vue 提供的一些方法&#xff08;如 push()、pop()、splice()、set() 等&#xff09;进行修改才会触…...

Linux安装Rabbitmq

说明&#xff1a;本文章主要是rabbitmq在Linux系统上的安装&#xff0c;文章中包含了rabbitmq的下载及依赖下载 1.版本选取&#xff0c;这里的选取主要是版本的兼容问题 去这个网址查看mq和erlang版本兼容&#xff1a;RabbitMQ Erlang Version Requirements | RabbitMQ 2.相…...

在nginx 服务器部署vue项目

以人人快速开发的开源项目&#xff1a;renren-fast-vue 为例 注&#xff1a;这里开始认为各位都会使用nginx 打包vue项目 npm run build 测试打包的项目是否可以运行 serve dist 可以正常运行 编译报错请移步到&#xff1a;renren-fast-vue1.2.2 项目编译报错: build g…...

制作一个简单的HTML个人网页

制作一个简单的HTML个人网页 1.1 硬件1.1.1 一台电脑1.1.2 配置要求 1.2 系统1.3 软件 二、制作一个简单的HTML个人网页1.创建一个HTML网页1.1 新建文本文档1.2 另存文本文档1.3 命名为index.html 2.编写HTML代码2.1 打开HTML2.2 复制HTML代码2.3 粘贴HTML代码2.4 保存HTML 3.预…...

HM2019创建载荷工况

该案例中将介绍载荷、工况、约束的创建 步骤一&#xff1a;首先创建两个载荷集(Load Collector)用来存放载荷和约束 步骤二&#xff1a;在Analysis面板下创建约束(Analysis→constraints) 注意&#xff1a;Load type选择SPC表示统计过程控制(Statistical Process Control) 步…...

Effective C++ 学习笔记 条款14 在资源管理类中小心copying行为

条款13导入这样的观念&#xff1a;“资源取得时机便是初始化时机”&#xff08;Resource Acquisition Is Initialization&#xff0c;RAII&#xff09;&#xff0c;并以此作为“资源管理类”的脊柱&#xff0c;也描述了auto_ptr和tr1::shared_ptr如何将这个观念表现在heap-base…...

c++数据结构算法复习基础-- 3 --线性表-单向链表-笔试面试常见问题

1、单链表逆序 思路图 代码实现 //著: 链表结构里记得加 friend void ReverseLink(Clink& link); void ReverseLink(Clink& link) {Node* p link.head_->next_;while( p nullptr){return;}Node* q p->next_;link.head_->next_ nullptr;while(p ! nullpt…...

【踩坑专栏】追根溯源,从Linux磁盘爆满排查故障:mycat2与navicat不兼容导致日志暴增

昨天遇到了一个比较奇怪的问题&#xff0c;就是在挂起虚拟机的时候&#xff0c;虚拟机提示我XX脚本正在运行&#xff0c;很奇怪&#xff0c;我没有运行脚本&#xff0c;为什么会提示我这个呢。今天恢复虚拟机&#xff0c;也提示了一下脚本的问题&#xff0c;而且发现Linux明显异…...

DolphinScheduler——奇富科技的调度实践

目录 一、技术架构 二、业务挑战 2.1 调度任务量大 2.2 运维复杂 2.3 SLA要求高 三、调度优化实践 3.1 重复调度 3.2 漏调度 3.3 Worker服务卡死 3.4 任务重复运行 四、服务监控 4.1 方法耗时监控 4.2 任务调度链路监控 五、用户收益 原文大佬的这篇调度系统案例…...

2024年最全洗地机选购攻略盘点丨希亦、小米、云鲸、海尔洗地机哪款值得入手?

在现代家居清洁中&#xff0c;洗地机是不可或缺的得力助手&#xff0c;它融合了吸尘、拖地等多种功能。面对市场上琳琅满目的洗地机品牌和型号&#xff0c;选择一个可靠的品牌至关重要。优质的品牌能够提供高品质的产品&#xff0c;使您的清洁工作更加轻松高效。本文将向您推荐…...

HTML笔记3

21&#xff0c;label标签 <label for"...">...</label> <label>...</label> <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content&qu…...

利用Python副业赚钱,看完这篇你就懂了!

Python都可以做哪些副业&#xff1f; 1、兼职处理数据Excel整理数据功能虽然很强大&#xff0c;但在Python面前&#xff0c;曾经统治职场的它也的败下阵来。因为Python在搜集数据整理分析数据的过程中更加便捷&#xff0c;通过几行代码还可以实现自动化操作。 如果你学会Pyth…...

FP16(半精度浮点数)、FP32(单精度浮点数)和INT8

在深度学习和计算机视觉领域中&#xff0c;FP16&#xff08;半精度浮点数&#xff09;、FP32&#xff08;单精度浮点数&#xff09;和INT8&#xff08;8 位整数&#xff09;是常见的数据类型或精度表示方式。它们在不同的场景下有各自的优势和用途。 FP16&#xff08;半精度浮…...

MySQL数据管理二

1.数据库的完整性 数据库中的数据是从外界输入的&#xff0c;而数据的输入由于种种原因&#xff0c;会发生输入无效或错误信息。保证输入的数据符合规定&#xff0c;成为了数据库系统&#xff0c;尤其是多用户的关系数据库系统首要关注的问题。 它是应防止数据库中存在不符合语…...

sqoop-import 详解

文章目录 前言一、介绍1. sqoop简介2. sqoop import的作用3. 语法3.1 sqoop import 语法3.2 导入配置属性 二、导入参数1. 常见参数2. 验证参数3. 导入控制参数4. 用于覆盖映射的参数5. 增量导入参数6. 输出行格式参数7. 输入解析参数8. Hive 参数9. HBase 参数10. Accumulo 参…...

第二周opencv

一、边缘检测算子 边缘检测算子是用于检测图像中物体边界的工具。边缘通常表示图像中灰度值或颜色发生显著变化的地方。边缘检测有助于识别图像中的物体形状、轮廓和结构。这些算子通过分析图像的灰度或颜色梯度来确定图像中的边缘。 梯度算子 要得到一幅图像的梯度&#xff0c…...

python_读取txt文件绘制多条曲线II

从给定的列表中来匹配txt文件对应列的数据&#xff1b; import matplotlib.pyplot as plt import re from datetime import datetime from pylab import mplmpl.rcParams["font.sans-serif"] ["SimHei"] # 设置显示中文字体 mpl.rcParams["axes.un…...

java排序简单总结和推荐使用套路(数据排序,结构体排序)

了解int和Integer的区别 int是Java的基本数据类型&#xff0c;用于表示整数值。Integer是int的包装类&#xff0c;它是一个对象&#xff0c;可以包含一个int值并提供一些额外的功能。 Java集合框架中的集合类&#xff08;如List、Set、Map&#xff09;只能存储对象&#xff0c;…...

掘根宝典之C语言联合和枚举

联合 C语言中的联合&#xff08;Union&#xff09;是一种特殊的数据类型&#xff0c;它允许在同一块内存空间中存储不同类型的数据。 联合与结构体类似&#xff0c;但不同的是&#xff0c;在给联合变量赋值时&#xff0c;它只能存储最后一次赋值的值。 创建联合 在C语言中&…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...