C哈的刷题计划之输出数字螺旋矩阵(1)

1、盲听C哈说

        都说数据结构与算法是编程的核心,它们两个是内功与心法😀,其它编程工具只是招式,学会了内功与心法,学习新事物(这里特指层出不穷的IT技术)就没有那么难了,实际上,对于一个编程人员,每天保持刷题(算法题 或者 一些简单的题保持手感)还是非常有必要的,基于此,决定新开一个栏目 — 🔍️C哈的刷题计划🔍️,带着大家一起来学习、做题、讨论,毕竟一个人的路难走,一群人才能够走得更远,希望渴望进步的你,能够和我一起,时刻保持竞争力,自然不会有职场焦虑📚️,在过去的几年时间里,我感觉自己的能力没有得到多大的进步,倒是情商提高了不少,大多数时候都是在处理人际关系,当我意识到这一点的时候,我感到非常糟糕,我们应该把更多的时间和经历放在个人成长上面,毕竟,天下熙熙,皆为利来;天下攘攘,皆为利往。

        话不多说,今天做了一道题,是关于二维数组知识点的 — 输出数字螺旋矩阵,我们一起来看一下这道题的分析思路和代码实现。

2、问题描述

(1)题目描述

        输入一个正整数N,生成一个N x N的螺旋矩阵,矩阵中元素取值为1 ~ N^{2},1在左上角,其余各数按顺时针方向旋转前进,依次递增放置。

例如 当 N = 4 时,矩阵各元素如下:

1234
1213145
1116156
10987

(2)输入描述 

        输入占一行,为一个正整数N,1 <= N <=9。

 (3)输出描述 

        输出N x N 大小的螺旋矩阵,即输出N行,每行有 N 个 数字,每个数字输出时占3个字符的宽度

(4)样例输入

        4

(5)样例输出 

1234
1213145
1116156
10987

3、问题分析 

        这道题我们可以使用二维数组这一数据结构来解决,通过观察,我们发现,填数是按照顺时针方向填数,但是填的数的数量在不断减少📍,举个例子,比如一开始,向右填的是1 2 3 4,然后往下填5 6 7,再往右边填8 9 10,再往上填11 12,发现,填的数据的个数在不断减少,比如一开始是4个,然后是3个,然后是2个……

        那怎么办呢?我们可以来模拟一下从左上角开始按顺时针方向旋转前进并填数,在什么情况下我们需要填数呢? — 显然,当下一个位置非0(将二维数组初始化为0),就说明不能再往该方向填写数字了(已经到达填写数字的边界了),而是要切换到下一个方向继续填写数字🛳️。且在填写数据的时候不能超过最外围边界,那么边界怎么来表示呢?以向右为例,即y+1<=N,代表下一个位置在哪里,必须小于边界(当然在这里,二维数组不使用下标0,从下标1开始用起)。

        代码方面,可以考虑使用while循环,因为这题就是按条件循环嘛,整体来说,while比for更加合适,当然如果你硬着头皮要使用for,也没有人会阻止你啦~

4、代码实现

#include<bits/stdc++.h>
using namespace std;
int main()
{//n行n列,共n*n个数int n;  //第0行、0列元素不用,所有元素都初始化为0int a[20][20] = {0}; //输入矩阵大小 n行n列 cin >> n; //(x,y)代表当前位置(第x行,第y列) int x = 1,y = 1;// cnt代表当前要填写的数据 int cnt = 0;  a[1][1] = 1; //初始化起始数据// 总共填写n*n个数,先把cnt+1再填数,当cnt==n*n时,退出循环 while(cnt < n*n) {//向右填充数据while(y+1<=n && a[x][y+1]==0){a[x][y+1] = ++cnt;y++;} //向下填充数据while(x+1<=n && a[x+1][y]==0){a[x+1][y] = ++cnt;x++;} //向左填充数据while(y-1>=1 && a[x][y-1]==0){a[x][y-1] = ++cnt;y--;} //向上填充数据while(x-1>=1 && a[x-1][y]==0){a[x-1][y] = ++cnt;x--;} } for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout << setw(3) << a[i][j];}cout << endl;}return 0;
}

5、OJ测试

大家写完代码之后如果想要做OJ测试,可以找我要相关链接,电脑自动评测会更加准确~,好了,今天这篇文章就讲到这里,我们下期再见~

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

AD22Duplicate Net Names Wire问题

在验证的时候发现报了这个错误 我这个原理图都是用自定义的元件 只写在name引脚名字是会报这个错的 但是换成designator引脚标识就不会了 建议是name引脚名字和designator引脚标识都写 写成一样都行&#xff0c;就不会报这个错了&#xff0c;别空着

centos7上安装mysql

1.现查看虚拟机上有没有wget包&#xff0c;如果没有的话进行安装 yum install -y wget 2.进入MySQL :: Download MySQL Yum Repository下载mysql安装源 找到与linux相应的版本&#xff0c;复制地址&#xff0c;如果找不到地址&#xff0c;可以复制如下 3.下载mysql官方yum源 …

hadoop报错找不到主类

错误&#xff1a; (base) mpsmps3:~$ hadoop hadoop_map_redce-1.0-SNAPSHOT.jar MovieDriver /input/movies-to-be-predicted.txt Error: Could not find or load main class hadoop_map_redce-1.0-SNAPSHOT.jar解决办法&#xff1a; 1.输入命令 hadoop classpath配置好了ha…

使用 start-local 脚本在本地运行 Elasticsearch

警告&#xff1a;请勿将这些说明用于生产部署 本页上的说明仅适用于本地开发。请勿将此配置用于生产部署&#xff0c;因为它不安全。请参阅部署选项以获取生产部署选项列表。 使用 start-local 脚本在 Docker 中快速设置 Elasticsearch 和 Kibana 以进行本地开发或测试。 此设…

Day14 - CV项目实战:SAR飞机检测识别

论文原文&#xff1a; ​​​​​​SAR-AIRcraft-1.0:高分辨率SAR飞机检测识别数据集 - 中国知网 第一排的7张图片&#xff0c;普通人肉眼很难看出对应的是第二排的飞机。 还有上图里标注的飞机&#xff0c;外行根本看不明白&#xff0c;为什么这些是&#xff0c;其他的不是。…

Threejs 材质贴图、光照和投影详解

1. 材质和贴图 材质&#xff08;Material&#xff09;定义了物体表面的外观&#xff0c;包括颜色、光泽度、透明度等。贴图&#xff08;Textures&#xff09;是应用于材质的图像&#xff0c;它们可以增加物体表面的细节和真实感。 1.1材质类型 MeshBasicMaterial&#xff1a…

笔记整理—linux驱动开发部分(11)中断上下文

触摸屏分为两种&#xff0c;一种为电阻式触摸屏&#xff0c;另一种为电容式触摸屏。电阻式触摸屏&#xff08;x、x-、y、y-、AD&#xff09;有两种接口&#xff0c;一种为SOC自带的接口&#xff08;miscinput或platform&#xff09;&#xff0c;第二种为外部IC&#xff0c;通过…

网络编程示例之开发板测试

编译elf1_cmd_net程序 &#xff08;一&#xff09;设置交叉编译环境。 &#xff08;二&#xff09;查看elf1_cmd_net文件夹Makefile文件。查看当前编译规则&#xff0c;net_demo是编译整个工程&#xff0c;clean是清除工程。 &#xff08;三&#xff09;输入命令。 &#xff0…

【GD32】(一) 开发方式简介及标准库开发入门

文章目录 0 前言1 开发方式选择2 标准库模板的创建3 遇到的问题和解决方法 0 前言 因为项目关系&#xff0c;需要使用GD32。之前对此早有耳闻&#xff0c;知道这个是一个STM32的替代品&#xff0c;据说甚至可以直接烧录STM32的程序&#xff08;一般是同型号&#xff09;&#x…

Java NIO 核心知识总结

NIO 简介 在传统的 Java I/O 模型&#xff08;BIO&#xff09;中&#xff0c;I/O 操作是以阻塞的方式进行的。也就是说&#xff0c;当一个线程执行一个 I/O 操作时&#xff0c;它会被阻塞直到操作完成。这种阻塞模型在处理多个并发连接时可能会导致性能瓶颈&#xff0c;因为需…

Spring如何解决循环依赖的问题

Spring 如何解决循环依赖的问题 Spring 是通过三级缓存来解决循环依赖问题&#xff0c;第一级缓存里面存储完整的Bean实例&#xff0c;这些实例是可以直接被使用的&#xff0c;第二级缓存存储的是实例化后但是还没有设置属性值的Bean实例&#xff0c;也就是Bean里面的 依赖注入…

深度图变换器的新突破:DeepGraph

人工智能咨询培训老师叶梓 转载标明出处 在图变换器领域&#xff0c;尽管其全局注意力机制在图结构数据处理上显示出了巨大潜力&#xff0c;但现有的图变换器模型却普遍较浅&#xff0c;通常不超过12层。这一现象引发了学者们对于“增加层数是否能进一步提升图变换器性能”的深…

单体架构 IM 系统之 Server 节点状态化分析

基于 http 短轮询模式的单体架构的 IM 系统见下图&#xff0c;即客户端通过 http 周期性地轮询访问 server 实现消息的即时通讯&#xff0c;也就是我们前面提到的 “信箱模型”。“信箱模型” 虽然实现非常容易&#xff0c;但是消息的实时性不高。 我们在上一篇文章&#xff08…

阿里云通义大模型团队开源Qwen2.5-Coder:AI编程新纪元

&#x1f680; 11月12日&#xff0c;阿里云通义大模型团队宣布开源通义千问代码模型全系列&#xff0c;共6款Qwen2.5-Coder模型。这些模型在同等尺寸下均取得了业界最佳效果&#xff0c;其中32B尺寸的旗舰代码模型在十余项基准评测中均取得开源最佳成绩&#xff0c;成为全球最强…

计算机网络(8)数据链路层之子层

上一篇已经讲到数据链路层可以分为两个子层&#xff0c;这次将重点讲解子层的作用和ppp协议 数据链路层的子层 数据链路层通常被分为两个子层&#xff1a; 逻辑链路控制子层&#xff08;LLC&#xff0c;Logical Link Control&#xff09;&#xff1a; LLC子层负责在数据链路…

【操作系统】输入/输出(I/O)管理

王道笔记 一、I/O管理描述 1.1 I/O设备的概念和分类 1.1.1 什么是I/O设备 “I/O”就是“输入/输出”&#xff08;Input/Output&#xff09; I/O设备机会可以将数据输入到计算机&#xff0c;或者可以接收计算机输出数据的外部设备&#xff0c;属于计算机中的硬件部件。下图就…

Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV买卖股票的最佳时机III309.买卖股票的最佳时机含冷冻期

Day44 | 动态规划 &#xff1a;状态机DP 买卖股票的最佳时机IV&&买卖股票的最佳时机III&&309.买卖股票的最佳时机含冷冻期 动态规划应该如何学习&#xff1f;-CSDN博客 本次题解参考自灵神的做法&#xff0c;大家也多多支持灵神的题解 买卖股票的最佳时机【…

Koa进阶:掌握中间件和参数校验的艺术

目录 一、首先下载依赖 二、在index.js中引入koa-parameter&#xff0c;一般挂载这个中间件时会放在注册请求体的后面 三、使用实例 四、如果跟我们所需求的参数不同&#xff0c;返回结果直接会返回422 koa-parameter一般是用来校验请求传过来的参数是否是自己所需要的的 G…

opencv(c++)----图像的读取以及显示

opencv(c)----图像的读取以及显示 imread: 作用&#xff1a;读取图像文件并将其加载到 Mat 对象中。参数&#xff1a; 第一个参数是文件路径&#xff0c;可以是相对路径或绝对路径。第二个参数是读取标志&#xff0c;比如 IMREAD_COLOR 表示以彩色模式读取图像。 返回值&#x…

git config是做什么的?

git config是做什么的&#xff1f; git config作用配置级别三种配置级别的介绍及使用&#xff0c;配置文件说明 使用说明git confi查看参数 默认/不使用这个参数 情况下 Git 使用哪个配置等级&#xff1f; 一些常见的行为查看配置信息设置配置信息删除配置信息 一些常用的配置信…