华为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];}}
}

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

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

相关文章

Globeland30米分辨率土地利用数据的下载

全国地理信息资源目录服务系统 先注册一下&#xff0c;登录 点击查询

Yolo不改包代码关闭控制台推理日志

在预测的参数列表里加上verboseFalse结即可关闭控制台输出日志 model.predict(sourcecolor_image,showTrue,verboseFalse)

国内chatgpt写作软件,chatgpt国内使用

随着人工智能技术的不断发展&#xff0c;国内涌现出了一些基于ChatGPT模型的写作软件&#xff0c;这些软件不仅能够实现智能化的文章写作&#xff0c;还支持批量生成各种类型的文章。本文将深入探讨国内ChatGPT写作软件&#xff0c;以及它们在批量文章创作方面的应用与优势。 C…

使用最新Hal库实现USART中断收发功能(STM32F4xx)

目录 概述 1 认识STM32F4XX的USART 1.1 USART 功能说明 1.2 USART的中断 1.3 USART 模式配置 1.4 USART的寄存器 2 使用STM32CubeMX 生成工程 2.1 配置参数 2.2 生成工程代码 3 实现软件功能 3.1 软件功能介绍 3.2 认识USART Hal库 3.2.1 初始化函数组 3.2.2 发送…

一周学会Django5 Python Web开发-Django5详细视图DetailView

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计28条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

vue+element模仿实现云码自动验证码识别平台官网

一、项目介绍 项目使用传统vue项目结构实现&#xff0c;前端采用element实现。 element官网&#xff1a;Element - The worlds most popular Vue UI framework 云码官网地址&#xff1a;云码-自动验证码识别平台_验证码识别API接口_免费验证码软件 项目截图&#xff0c;支持…

ios csr 证书创建

苹果Certificate证书创建 1.开始创建。 登录苹果开发者网站 选择Certificates旁边的 ✙按钮 选择你想要的证书类型&#xff0c;手机开发的话一般是iOS APP Development 跟 iOS Distribution&#xff08;App Store and Ad Hoc&#xff09;&#xff0c;如果要Mac和iOS都可以发…

NCT 全国青少年编程图形化编程(Scratch)等级考试(一级)模拟测试H

202312 青少年软件编程等级考试Scratch一级真题 第 1 题 【 单选题 】 以下说法合理的是( ) A :随意点开不明来源的邮件 B :把密码设置成 abc123 C :在虚拟社区上可以辱骂他人 D :在改编他人的作品前&#xff0c; 先征得他人同意 正确答案&#xff1a; D 试题解析&…

C# aes加密解密byte数组

using System.Security.Cryptography; using System.Text;namespace AESStu01;public class AesHelper {// AES加密密钥和向量&#xff08;需要保密&#xff09; private static readonly string Key "";//16长度字符串数字混合private static readonly string IV …

LeetCode--42

42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,…

PackagingTool_x64_v2.0.1.0图片转档打包二进制文件合并字库生成图片软件介绍

继去年12月份发布的打包软件PackagingTool v1.4.0.2之后&#xff0c;今年再度投入精力&#xff0c;完善了软件功能&#xff0c;同时开发了几个更加实用的工具&#xff0c;可助力UI界面的设计开发。当前最新版本为PackagingTool_x64_v2.0.1.0&#xff0c;该版本主界面如下&#…

Windows操作系统中各种功能、快捷键

目录 引言一、系统1.任务管理器&#xff08;当前进程属性&#xff09;2.画图板3.计算器4.CMD命令行窗口5.控制面板6.记事本7.写字板 二、浏览器1.打开开发者工具2.页面搜索 三、AcWing1.替换2.对多处进行相同操作3.光标变为下划线 引言 由于本专业是计算机专业&#xff0c;所以…

Spring Cloud中,Eureka常见问题总结

Spring Cloud中&#xff0c;Eureka常见问题总结。 指定Eureka的Environment 1eureka.environment: 指定环境参考文档&#xff1a;Configuring Eureka Netflix/eureka Wiki GitHub 指定Eureka的DataCenter 1eureka.datacenter: 指定数据中心参考文档&#xff1a;Configuring …

SpringBoot:Invalid bound statement (not found)的原因和解决方案

&#x1f413; 报错信息&#xff1a; &#xff08;无效绑定声明&#xff09;找不到 解析&#xff1a; 你的mapper实例对象和对应的mapper.xml对象未找到 &#x1f413; 排查&#xff1a; 情况一&#xff1a; 1.排除相对应的mapper实例对象路径是否正确 查看相对应的mapper中…

unity3d中单例模式两种简单写法与对比

一、 public class UlManager {private static UlManager instance;private void Awake(){if(instance ! null)Destroy(this);else instance this;} }二、 public class UlManager {private static UlManager instance;public static UlManager Instance{get{if (instance …

ChatGPT聊YOLO

最近ChatGPT大伙&#xff0c;其概括摘要能力非常强。YOLO系列算法也是目标检测领域非常重要的一个研究路线&#xff0c;那么ChatGPT是如何看待各个YOLO算法的呢&#xff1f;那我们去问问它如何看待各个版本的YOLO。 截止到2021年9月&#xff0c;YOLOv6尚未发布。因此&#xff0…

类复习【C#】

【访问级别】【修饰】【返回类型】 类名 : 【被继承类】【被继承接口】 { 字段&#xff1b; 属性&#xff1b; 默认构造器&#xff1b;// 无参构造器 有参构造器&#xff1b; 私有方法&#xff1b; public 公共方法&#xff1b; } 修饰&#xff1a; 修饰符【C#】-CSDN…

pycharm实现上传excel生成word

下载需要的依赖包 pip install openpyxl python-docx flaskmain.py文件 from flask import Flask, request, render_template from openpyxl import load_workbook from docx import Documentapp Flask(__name__, template_foldertemplates)app.route(/) def index():return…

小程序面试题:js、vue、uni、小程序的页面传参方式区别

js、vue、uni、小程序的页面传参方式区别&#xff1f; 1、 js传参 通过location.href跳转传参和接收参数&#xff0c;url后面拼接参数来进行跳转传参。 2、 vue传参 可以通过标签router-link的to属性跳转传参&#xff0c;也可以通过事件里的this.$router.push跳转传参。传参有…

寒假作业Day 03

寒假作业Day 03 一、选择题 在C语言中&#xff0c;字符型指针char *p;通常用于指向字符数组&#xff08;即字符串&#xff09;的首字符。对于给定的选项&#xff0c;我们来分析每一个选项是否可以将字符串正确地赋值给p&#xff1a; A: pgetchar(); getchar()函数从标准输入读…