華為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.pswp.cn/news/716225.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716225.shtml
英文地址,請注明出處:http://en.pswp.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()函數從標準輸入讀…