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

news2024/12/23 22:25:28

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列元素不用,所有元素都初始化为0
	int 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.coloradmin.cn/o/2240583.html

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

相关文章

cv::RotatedRect::points误差较大

最后发现不是point的精度问题&#xff0c;float不至于产生这么大误差&#xff0c;是自己代码里缓存了顶点坐标&#xff0c;后面由手动修改了旋转矩形的角度&#xff0c;导致不匹配&#xff01; 下文可以忽略了-_-! 发现一个天坑&#xff0c;通过高宽和角度构造了一个旋转矩形 …

ThinkServer SR658H V2服务器BMC做raid与装系统

目录 前提准备 一. 给磁盘做raid 二. 安装系统 前提准备 磁盘和系统BMC地址都已经准备好&#xff0c;可正常使用。 例&#xff1a; 设备BMC地址&#xff1a;10.99.240.196 一. 给磁盘做raid 要求&#xff1a; 1. 将两个894G的磁盘做成raid1 2. 将两块14902G的磁盘各自做…

7天用Go从零实现分布式缓存GeeCache(学习)(2)

参考:https://geektutu.com/post/geecache-day2.html // Cache 是一个 LRU 缓存&#xff08;最近最少使用缓存&#xff09;&#xff0c;它不是并发安全的。 type Cache struct { maxBytes int64 // 缓存的最大字节数 nbytes int64 …

Ajax 与 Vue 框架应用点——随笔谈

老式 在老式的技术中&#xff0c;一个网页通常由前端工程师直接使用 HTML、CSS、JavaScript 编写而成 这种方式的优点很明显&#xff1a;简单粗暴&#xff0c;方便工程师以简单的思维完成工作 当然&#xff0c;缺点也很明显&#xff0c;包括但不限于&#xff1a; 直接原生开发…

鸿蒙动画开发06——打断动画

1、前 言 UI界面除了运行动画之外&#xff0c;还承载着与用户进行实时交互的功能。当用户行为根据意图变化发生改变时&#xff0c;UI界面应做到即时响应。 例如用户在应用启动过程中&#xff0c;上滑退出&#xff0c;那么启动动画应该立即过渡到退出动画&#xff0c;而不应该…

vue2和vue3的区别详解

vue2 VS vue3 对比vue2vue3配置脚手架cmd命令行可视化方式创建脚⼿架组件通信props、$emit、provide、$arrts、EventBus等props、$emit、provide、inject、arrts等数据监听watch,computedwatch,watchEffect,computed双向绑定Object.definePropertyProxyAPI⽣命周期四个阶段befo…

Spring Cloud Eureka 服务注册与发现

Spring Cloud Eureka 服务注册与发现 一、Eureka基础知识概述1.Eureka两个核心组件2.Eureka 服务注册与发现 二、Eureka单机搭建三、Eureka集群搭建四、心跳续约五、Eureka自我保护机制 一、Eureka基础知识概述 1.Eureka两个核心组件 Eureka Server &#xff1a;服务注册中心…

用MVVM设计模式提升WPF开发体验:分层架构与绑定实例解析

MVVM&#xff08;Model-View-ViewModel&#xff09;是一种架构模式&#xff0c;广泛应用于现代前端开发&#xff0c;尤其是在微软的WPF&#xff08;Windows Presentation Foundation&#xff09;应用程序中。它旨在通过将视图&#xff08;UI&#xff09;与业务逻辑&#xff08;…

飞牛云fnOS本地部署WordPress个人网站并一键发布公网远程访问

文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress 前言 本文旨在详细介绍如何在飞牛云NAS上利用Docker部署WordPress&a…

论文笔记 SuDORMRF:EFFICIENT NETWORKS FOR UNIVERSAL AUDIO SOURCE SEPARATION

SUDORMRF: EFFICIENT NETWORKS FOR UNIVERSAL AUDIO SOURCE SEPARATION 人的精神寄托可以是音乐&#xff0c;可以是书籍&#xff0c;可以是运动&#xff0c;可以是工作&#xff0c;可以是山川湖海&#xff0c;唯独不可以是人。 Depthwise Separable Convolution 深度分离卷积&a…

【HarmonyOS】鸿蒙系统在租房项目中的项目实战(一)

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

/// ts中的三斜线指令 | 前端

第一次看到注意到这行代码&#xff0c;不知道的还以为是注释呢&#xff0c;查了资料才知道这是typescript中的三斜线指令&#xff0c;那有什么作用呢&#xff1f; 1. 这行代码是TypeScript中的一个三斜线指令&#xff08;Triple-Slash Directive&#xff09;&#xff0c;用于…

学习日记_20241110_聚类方法(K-Means)

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

SMA-BP基于黏菌算法优化BP神经网络时间序列预测

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

ssm103宠物领养系统+vue(论文+源码)_kaic

毕业设计&#xff08;论文&#xff09; 宠物领养系统的设计与实现 学生姓名&#xff1a; 二级学院&#xff1a; 班级名称&#xff1a; 指导教师&#xff1a; 年 月 日 录 摘 …

Elasticsearch如果集群出现节点故障,我应该如何快速定位问题?

当 Elasticsearch (ES) 集群发生故障时&#xff0c;快速定位问题源头非常重要。Elasticsearch 是一个分布式系统&#xff0c;故障可能由多种原因引起&#xff0c;涉及到硬件、配置、网络、集群本身的健康状况等多个层面。以下是一些定位问题的步骤和工具&#xff1a; 检查集群…

k8s-service、endpoints、pod之间是怎么进行网络互通的

k8s-service、endpoints、pod之间是怎么进行网络互通的 1、service2、endpoints3、service、endpoints、pod通信图4、不同服务pod内部间访问 1、service 在K8S中&#xff0c;Service是一种抽象&#xff0c;定义了一组Pod的逻辑集合和访问这些Pod的策略。首先&#xff0c;我们需…

dbeaver 连接日常是数据库工具类似navicat

官网下载安装包 DBeaver Community | Free Universal Database Tool 登录mysql为例 字体调整 sql 美化&#xff0c;关键字大写 快捷键 执行 ctrlenter 单个语句执行 alt x 执行sql脚本 事务提交&#xff0c;默认自动&#xff0c;可以改成手动 创建数据库 新建表 添加主键 …

Chromium 中chrome.webRequest扩展接口定义c++

一、chrome.webRequest 注意 &#xff1a;从 Manifest V3 开始&#xff0c;"webRequestBlocking" 权限不再适用于大多数扩展程序。以 "declarativeNetRequest" 为例&#xff0c;它允许使用 declarativeNetRequest API。除了 "webRequestBlocking&quo…

【MySQL】数据库必备知识:全面整合表的约束与深度解析

前言&#xff1a;本节内容讲述表的约束的相关内容。 表的约束博主将会通过两篇文章进行讲解&#xff0c; 这是第一篇上半部分。 讲到了约束概念。 以及几种常见约束。下面友友们开始学习吧&#xff01; ps:友友们使用了mysql就可以放心观看喽&#xff01; 目录 表的约束概念 …