首页 > 其他分享 >螺旋数字矩阵

螺旋数字矩阵

时间:2024-07-19 13:54:59浏览次数:15  
标签:intArr 数字 螺旋 int 矩阵 break ++ num --

题目描述

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

给出数字个数 n (0 < n ≤ 999)和行数 m(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

import java.util.Scanner;

/**
 * <h1>螺旋数字矩阵</h1>
 *
 *  分析:
 *      num的个数: n
 *      行数: m
 *      列数: l = n/m + 1
 *      num 和 * 的总数: m*l
 *      * 的个数: x = l*m - n
 *
 */
public class Main {
    public static void main(String[] args) throws InterruptedException {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String input = in.nextLine();
            String[] inputs = input.split("\\s+");
            int n = Integer.parseInt(inputs[0]);
            int m = Integer.parseInt(inputs[1]);
            process(n, m);
        }
    }

    private static void process(int n, int m) {
        // 列数
        int l = n / m + 1;

        // 定义二维数组
        int x = m;
        int y = l;
        int[][] intArr = new int[x][y];

        // 从1开始填充
        int num = 1;

        // 循环一次,顺时针转一圈
        int k = 0;
        while (true) {
            // 填充的数字大于二维数组的容量时,结束
            if (num > l * m) {
                break;
            }
            // 顺时针转一圈
            // 上
            for (int i = k; i < y - 1; i++) {
                intArr[k][i] = num;
                num++;
                if (num > l * m) {
                    break;
                }
            }

            // 右
            for (int i = k; i < x - 1; i++) {
                intArr[i][y - 1] = num;
                num++;
                if (num > l * m) {
                    break;
                }
            }

            // 下
            for (int i = y - 1; i > k; i--) {
                intArr[x - 1][i] = num;
                num++;
                if (num > l * m) {
                    break;
                }
            }

            // 左
            for (int i = x - 1; i > k; i--) {
                intArr[i][k] = num;
                num++;
                if (num > l * m) {
                    break;
                }
            }

            x--;
            y--;
            k++;
        }

        // 遍历数组
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < l; j++) {

                // 对应位置的数值大于n时,打印“*” -- 加了制表符,格式清晰
                if (intArr[i][j] > n) {
                    System.out.print("*" + "\t");
                } else {
                    System.out.print(intArr[i][j] + "\t");
                }
            }
            System.out.println();
        }
    }
}

 

标签:intArr,数字,螺旋,int,矩阵,break,++,num,--
From: https://blog.csdn.net/J1e_Sir/article/details/140547104

相关文章

  • 你了解低空经济吗?数字孪生结合低空经济的最新应用
    低空观光飞行、无人机配送外卖、“空中的士”跨海跨城、无人机跨省低空物流配送、无人机施肥……这些场景的出现,都离不开“低空经济”的发展。 图源:央视新闻一、概念时下提出的“低空经济”,是指3000米高度以下,以各种有人驾驶和无人驾驶航空器的各类低空飞行活动为牵引,辐射带......
  • 数字IC——TCL语言2
    (接上一篇)http://t.csdnimg.cn/eChQlhttp://t.csdnimg.cn/eChQl目录三、控制流四、过程函数五、正则匹配六、文本处理 三、控制流if 条件判断语句新建test.tcl文件,写入以下内容:seta3setb2if{$a>$b}{puts$a}else{puts$b}注意事项......
  • 拆分数字
    描述给你一个数N,如果这个数可以由2个质数相乘得到,输出Yes,否则输出No。输入包含多组数据。思路直接分解质因数,如果分解的是两个,就cout<<yes,否则cout<<no代码#include<bits/stdc++.h>usingnamespacestd;intSplitToPrime(inta){ints=0;for(inti=2;i......
  • 数据系统可视化大屏与数字看板:赋能智慧未来的多面手
    随着信息技术的飞速发展,数据已成为现代社会的重要驱动力。数据系统可视化大屏与数字看板作为数据呈现的前沿技术,正逐步渗透到智慧城市、乡村、社区、工厂、商场、车站、机场、医院以及各行各业中,成为提升管理效率、优化资源配置、增强决策能力的重要工具。智慧城市在智慧城......
  • 代码随想录算法训练营第二天| 977 有序数组平方 209 长度最小子数组 59 螺旋矩阵
    977有序数组平方funcsortedSquares(nums[]int)[]int{ //思路,最简单,先平方,再排序 foridx,num:=rangenums{ nums[idx]=num*num } //插排思想,维护两个列表,将无序列表元素插入到有序列表合适位置 fori:=1;i<len(nums);i++{//此处nums[:i]即我们维......
  • 代码随想录算法训练营第42期 第二天 | LeetCode977. 有序数组的平方、209. 长度最小的
    一、977.有序数组的平方学习链接:有序数组的平方状态:暴力解法与双指针都做出来了时间复杂度:暴力解法O()    双指针解法 O()细节之处:暴力解法1       双指针解法1  暴力解法classSolution{publicint[]sortedSquares(int[]nums){......
  • 矩阵向量点积、Batch(批)理解、one-hot编码
    矩阵向量点积output=relu(dot(W,input)+b)input的每个元素为三维的特征向量的特征,W矩阵:行:存储节点权重数组列数表示节点数量所以result[1]和result[0]运算互不干扰,能够并行加速上述数学角度运算代码如下:defnaive_matrix_vector_dot(x,y):assertlen(x.sha......
  • 基于Java+Vue的采购管理系统:实现采购数字化升级(整套源码)
     前言:采购管理系统是一个综合性的管理平台,旨在提高采购过程的效率、透明度,并优化供应商管理。以下是对各个模块的详细解释:一、供应商准入供应商注册:供应商通过在线平台进行注册,填写基本信息和资质文件。资质审核:系统对供应商提交的资质文件进行自动或人工审核,确保供应商......
  • 一卡在手,数字化装备场信息无忧:RFID单装信息卡
        随着技术的不断进步和应用的不断深化,数字化装备场在军事领域的作用将越来越重要,为现代战争提供强有力的支持和保障。    RFID单装信息卡在数字化装备场技术中扮演着至关重要的角色。那么,什么是RFID单装信息卡?它对军事领域甚至是其他领域有没有作用呢?跟广......
  • 数字化装备场革新:智能装备采集设备问世!
        数字化装备场建设是一项跨学科的综合工程,它不仅涵盖了网络布线的整合、系统框架的构建,还包含了各类硬件设备的配置等丰富多样的内容。该工程的关键环节主要包括对装备场所的出入口进行现代化升级、完善车库车辆定位与管理体系,以及部署一体化的快捷警报系统。广州一......