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

embedded/2024/9/19 18:41:18/ 标签: OD, 华为, 模拟, Java

题目描述与示例

题目描述

疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。
他发明了一种写法:给出数字个数n和行数m (0 < n < 999,0 < m < 999),从左上角的1开始,按照顺时针螺旋向内写方式,依次写出2, 3, …, n,最终形成一个m行矩阵。
小明对这个矩阵有些要求:

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

输入描述

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

输出描述

符合要求的唯一短阵

示例

输入

9 4

输出

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

题目思路

和LeetCode 54. 螺旋矩阵类似。
本题只给出了矩阵的行数m,没有给列数,需要我们求解一个最少的列数来满足矩阵能够填入n个数字,因此列数 k = ceil(n / m),这里的除法不是整除,并且要对除法的结果向上取整。

参考代码

import java.util.Scanner;
import java.util.StringJoiner;public class Main {public static void main(String[] args) {// 输入Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();// 矩阵列数int k = (int) Math.ceil(n * 1.0 / m);String[][] matrix = new String[m][k];for (int i = 0; i < m; i++) {for (int j = 0; j < k; j++) {matrix[i][j] = "*";}}int row = 0, column = 0;int[][] directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};int directionIndex = 0;boolean[][] visited = new boolean[m][k];for (int i = 0; i < n; i++) {matrix[row][column] = String.valueOf(i + 1);visited[row][column] = true;int nextRow = row + directions[directionIndex][0];int nextColumn = column + directions[directionIndex][1];if (nextRow < 0 || nextRow >= m || nextColumn < 0 || nextColumn >= k || visited[nextRow][nextColumn]) {directionIndex = (directionIndex + 1) % 4;}row += directions[directionIndex][0];column += directions[directionIndex][1];}// 输出for (int i = 0; i < m; i++) {StringJoiner rowOutput = new StringJoiner(" ");for (int j = 0; j < k; j++) {rowOutput.add(matrix[i][j]);}System.out.println(rowOutput);}}
}

http://www.ppmy.cn/embedded/22762.html

相关文章

在IDEA中使用.env文件配置信息

在软件开发过程中&#xff0c;经常需要使用配置信息来指定应用程序的行为&#xff0c;例如数据库连接参数、API密钥等。而将这些敏感信息硬编码在代码中是不安全的&#xff0c;因此通常会将其存储在配置文件中。 .env文件是一种常见的配置文件格式&#xff0c;它可以存储键值对…

shell echo 显示不同颜色文本 背景色

#!/bin/bash # 颜色定义 # 黑色&#xff1a;0 BLACK$(tput setaf 0) BLACK_BG$(tput setab 0) # 红色&#xff1a;1 RED$(tput setaf 1) RED_BG$(tput setab 1) # 绿色&#xff1a;2 GREEN$(tput setaf 2) GREEN_BG$(tput setab 2) # 黄色&#xff1a;3 YELLOW$(tput seta…

CSS3多列(详解网页多列布局应用)

目录 一、多列介绍 1.概念 2.特点 3.常用功能 二、多列用法 1.列数和宽度控制 2.列间距和规则 3.跨列和分列内容 4.列宽度自动调整 5.垂直对齐 三、多列实例 1.多列布局 2.导航菜单 四、总结 一、多列介绍 1.概念 CSS3 多列布局是一种用于排列文本内容的 CSS 模块…

JS实现对用户名、密码进行正则表达式判断,按钮绑定多个事件,网页跳转

目标&#xff1a;使用JS实现对用户名和密码进行正则表达式判断&#xff0c;用户名和密码正确时&#xff0c;进行网页跳转。 用户名、密码的正则表达式检验 HTML代码&#xff1a; <button type"submit" id"login-btn" /*onclick"login();alidate…

MATLAB初学者入门(26)—— PID控制器优化设计

PID&#xff08;比例-积分-微分&#xff09;控制器是最常见的反馈控制算法之一&#xff0c;广泛应用于工业控制系统中。MATLAB提供了多种工具和方法来设计和优化PID控制器&#xff0c;确保系统达到预期的性能。使用MATLAB的PID Tuner工具&#xff0c;我们可以自动或手动调整PID…

前端开发中浏览器兼容问题总结

前端开发中浏览器兼容问题总结 PC端兼容问题及解决方案移动端兼容问题及解决方案 PC端兼容问题及解决方案 居中问题 div里的内容&#xff0c;IE默认为居中&#xff0c;而FF默认为左对齐&#xff0c;可以尝试增加代码margin: 0 auto;高度问题 两上下排列或嵌套的div&#xff0c…

PhaGCN2:病毒聚类

https://github.com/KennthShang/PhaGCN2.0 安装 mamba create -n phagcn2 python3.9 numpy pytorch networkx2.5 pandas mcl14.137 diamond0.9.14 biopython1.78 scipy1.5.2 conda activate phagcn2 git clone https://github.com/KennthShang/PhaGCN2.0cd database tar -zx…

Android 振动和触感反馈功能失效问题分析

文章目录 一、 可以先通过adb来确定是否有打印Log&#xff0c;查看中相关的按键振动事件是否有效二、 适配按键事件三、延长振动时长 在Android13的项目(MTK平台)中遇到这样一个问题&#xff0c;在设置 - 提示音和振动 - 振动和触感反馈 - 打开按触反馈&#xff0c;但是按键没有…

tidb离线本地安装及mysql迁移到tidb

一、背景&#xff08;tidb8.0社区版&#xff09; 信创背景下不多说好吧&#xff0c;从资料上查tidb和OceanBase“兼容”&#xff08;这个词有意思&#xff09;的比较好。 其实对比了很多数据库&#xff0c;有些是提供云服务的&#xff0c;有些“不像”mysql&#xff0c;综合考虑…

滑块验证码破解----Java使用opencv后端破解滑块验证

使用技术:Java SpringBootopenCV 在windows上首先需要下载opencv进行安装,先去官网:Releases - OpenCV 下载这个windows版本的安装包 下载后直接安装解压就行,然后需要,然后找到安装位置里的这个文件: 你下载的是什么版本的,这里的数字就是多少,比如我下载4.5.3版本那么这…

C# wpf 运行时替换方法实现mvvm自动触发刷新

文章目录 前言一、如何实现&#xff1f;1、反射获取属性2、定义替换方法3、交换属性的setter方法 二、完整代码1、接口2、项目 三、使用示例1、倒计时&#xff08;1&#xff09;、继承ViewModelBase&#xff08;2&#xff09;、定义属性&#xff08;3&#xff09;、属性赋值&am…

基于单片机的空气质量检测系统设计

摘要:随着社会经济的不断发展,人们的生活水平日益提高,健康与养生成为了全民关注的热点话题,空气质量地不断下降也引起了社会的广泛关注,如何了解家居内空气质量的情况也成了亟需解决的问题。在此背景下,本文针对室内空气的质量问题设计了基于单片机的空气质量检测系统,…

中间件解析漏洞

1 、 apache 解析漏洞 漏洞环境搭建 下载 vulhub git clone https://github.com/vulhub/vulhub.git 进入对应漏洞目录、 cd vulhub/httpd/apache_parsing_vulnerability apt-get docker-compose 启动漏洞环境 docker-compose up -d 注&#xff1a;启动容器时&#xf…

机器学习day4

超参数选择方法 交叉验证 1.交叉验证定义 交叉验证是一种数据集的分割方法&#xff0c;将训练集划分为n份&#xff0c;拿一份做测试集&#xff0c;其他n-1份做训练集 2.交叉验证法原理 将数据集划分为 cv4 份 1. 第一次&#xff1a;把第一份数据做验证集&#xff0c;其他数…

C#虚方法的使用场景

虚方法在C#中的使用场景主要涉及到面向对象编程中的多态性。通过使用虚方法&#xff0c;您可以在派生类中重写基类中定义的方法&#xff0c;从而实现不同对象在相同方法调用时表现出不同的行为。以下是几种常见的使用场景&#xff1a; 1.基类提供默认实现&#xff0c;派生类可…

LeetCode 150. 逆波兰表达式求值

LeetCode 150. 逆波兰表达式求值 1、题目 题目链接&#xff1a;150. 逆波兰表达式求值 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 ‘’、‘-’、…

深入理解汇编中的ZF、OF、SF标志位和条件跳转

本节课在线学习视频&#xff1a;https://pan.quark.cn/s/bbc4781e5336 汇编语言中的程序控制流常依赖于处理器的状态标志来进行决策。在x86架构中&#xff0c;ZF&#xff08;Zero Flag&#xff09;、OF&#xff08;Overflow Flag&#xff09;和SF&#xff08;Sign Flag&#x…

Docker-05 Docker容器命令

一、查看容器 查看正在运行的容器: docker ps属性说明CONTAINER ID容器 IDIMAGE所属镜像COMMAND启动容器时运行的命令CREATED创建时间STATUS容器状态PORTS端口NAMES容器名称查看停止的容器: docker ps -f status=exited查看所有容器(包括运行和停止): docker ps -a查看…

关于google search console工具提交sitemap.xml无法抓取的问题解决办法

其实这个问题很好解决。 第一种情况&#xff1a;利用工具为我们的网站自动生成静态的sitemap.xml文件。这种可以检查下是否完整&#xff0c;然后上传到根目录下去&#xff0c;再去google search console提交我们的网站地图。 第二种情况&#xff1a;同样利用工具自动生成动态s…

区块链基础——区块链应用架构概览

目录 区块链应用架构概览&#xff1a; 1、区块链技术回顾 1.1、以太坊结点结构 1.2、多种应用场景 2、区块链应用架构概览 2.1、传统的Web2 应用程序架构 2.2、Web3 应用程序架构——最简架构 2.3、Web3 应用程序架构——前端web3.js ether.js 2.4、Web3 应用程序架构—…