华为机试真题1(螺旋矩阵)
| 2024-4-6
0  |  Read Time 0 min

问题描述

疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法: 给出数字个数n和行数m(0 < n ≤ 999,0 < m ≤ 999),从左上角的1开始,按照顺时针螺旋向内写方式,依次写出2,3...n,最终形成一个m行矩阵。 小明对这个矩阵有些要求: 1.每行数字的个数一样多 2.列的数量尽可能少 3.填充数字时优先填充外部 4.数字不够时,使用单个*号占位

输入描述

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

输出描述

符合要求的唯一矩阵
💡
示例 1
输入 9 4 输出 1 2 3
* * 4 9 * 5 8 7 6 说明 9个数字写成4行,最少需要3列
示例 2 输入 3 5 输出 1 2 3 * *

解题思路

分析得出矩阵中的数字按照顺时针的方向递增,从矩阵的左上角开始,沿矩阵外围填充。输入要求显示最大的数,规定了最大的行数,只要确定列数即可。列数由行数影响,大于或等于最大数的整除行数可得列数。矩阵中的数按照从左到右,从上到下,然后从右到左,最后由下到上,循环执行这四个步骤,直到布满整个矩阵(关键在于每次执行一个步骤,行或者列都会减一)。类似下图:
notion image

示例代码

Loading...
Catalog