C++矩阵例题分析(3):螺旋矩阵

一、审题

时间限制:1000ms                内存限制:256MB                各平台平均AC率:14.89%

题目描述

输出一个n*n大小的螺旋矩阵。

螺旋矩阵的样子:

输入描述

共一行,一个正整数n,表示矩阵变长的长度

输出描述

共n行,每行n个正整数,表示n*n的螺旋矩阵

样例

输入

5

输出

 1   2   3   4   5

16 17  18 19  6

15 24 25 20  7

14 23 22 21  8

13 12  11  10  9

提示

1 <= n <= 100

二、思考

1. 初步观察填充方式(5*5为例)

次数方向个数
14
24
34
44
52
62
72
82
91

初步猜测:每次个数都-2,2之后是1

2. 二次观察填充方式(8*8为例)

 1    2   3   4   5    6   7    8

28 29 30 31 32 33 34   9

27 48 49 50 51 52 35  10

26 47 60 61 62 53 36  11

25 46 59 64 63 54 37 12

24 45 58 57 56 55 38 13

23 44 43 42 41 40 39 14

22 21  20 19  18 17  16 15 

次数方向个数
17
27
37
47
55
65
75
85
93
103
113
123
131
141
151

二次猜测:初步猜测是正确的

3. 观察填充次数

推导过程省略……

次数 = 2n - 1

 4. 伪代码

int Q = 2 * n - 1; // 次数
int times = n - 1; // 填充个数
for (int i = 1 ~ Q)for (int i = 1 ~ times)// 填充

        最重要的是如何填充。嗯……还是硬着来吧。

int x = 1, y = 1;
int temp_x = 1, temp_y = 1;
int fill = 1;
int direction = 0;
/*
x: 填充的x坐标
y: 填充的y坐标
temp_x: 临时存储x坐标
temp_y: 临时存储y坐标
fill: 填充的数字
direction: 填充时面向的方向0: 右1: 下2: 左3: 上
*/
for (int i = 1 ~ Q)for (int i = 1 ~ times)matrix[x][y] = fill; // 填充数字if (direction == 0)y++; // 向右一列if (direction == 1)x++; // 向下一行if (direction == 2)y--; // 向左一列if (direction == 3)x--; // 向上一行fill++; // 填充数字自增if (times == 2)times--;elsetimes -= 2;temp_x++;temp_y++;x = temp_x;y = temp_y;

嗯哼……打乱,重来一下。

5. 参考答案

#include <iostream>
using namespace std;int main()
{// 数据初始化int n;int matrix[105][105] = {};int x, y;int fill = 1;int direction = 0;// 输入cin >> n;// 存储螺旋矩阵int left = 1, right = n, top = 1, bottom = n;while (left <= right && top <= bottom){// 从左到右for (int i = left; i <= right; i++){matrix[top][i] = fill++;}top++;// 从上到下for (int i = top; i <= bottom; i++){matrix[i][right] = fill++;}right--;// 从右到左for (int i = right; i >= left; i--){matrix[bottom][i] = fill++;}bottom--;// 从下到上for (int i = bottom; i >= top; i--){matrix[i][left] = fill++;}left++;}// 输出for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){cout << matrix[i][j] << " ";}cout << endl;}return 0;
}/*
这段代码的思路是通过四个边界值left、
right、top、bottom来确定当前填充范
围的边界,然后使用四个循环依次填充螺旋
矩阵的四个方向上的元素。具体来说,首先将top行从左到右填充为1
到n,然后将right列从上到下填充为n+1
到2n-1,接着将bottom行从右到左填充为
2n到3n-2,最后将left列从下到上填充为
3n-1到4n-3。每填充一行或一列,对应的
边界值会进行相应的更新。最后,输出填充好的螺旋矩阵。
*/

总算推导出来了!同志们,前面的伪代码有点问题哈~

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

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

相关文章

NGUI基础-Widget

目录 Widget是什么 Widget组件包含的属性 Pivot Depth Size snap Aspect Free Based on Width Based on Height Widget是什么 在Unity UI系统中&#xff0c;"Widget"是指UI元素的基类&#xff0c;它为UI元素提供了位置、大小和锚点等基本属性。通过使用&qu…

LeetCode 2:两数相加

一、题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个…

QT上位机开发(网络程序界面开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 传统的上位机对接方式还是以232、485、can为主&#xff0c;随着网络的发展&#xff0c;越来越多的设备都是以网络进行通信的。毕竟相比较之前&…

java练习题之List(ArrayList)集合练习

List集合 习题&#xff1a; 1&#xff1a;完成以下填空&#xff1a; List 接口的特点是元素 有序 &#xff08;有|无&#xff09;顺序&#xff0c; 可重复 &#xff08;可以|不可以&#xff09;重复&#xff1b; 2&#xff1a;(List)关于List 集合描述正确的是&#xff08;…

肠道炎症与年龄和阿尔茨海默病病理学相关:一项人类队列研究

谷禾健康 ​阿尔茨海默 研究表明&#xff0c;慢性低水平的炎症&#xff08;“炎症衰老”&#xff09;可能是年龄相关疾病的一个介导因素&#xff0c;而肠道微生物通过破坏肠道屏障可能会促进炎症。 虽然老化和阿尔茨海默病&#xff08;AD&#xff09;与肠道微生物群组成的改变有…

Mybatis缓存实现方式

文章目录 装饰器模式Cache 接口及核心实现Cache 接口装饰器1. BlockingCache2. FifoCache3. LruCache4. SoftCache5. WeakCache 小结 缓存是优化数据库性能的常用手段之一&#xff0c;我们在实践中经常使用的是 Memcached、Redis 等外部缓存组件&#xff0c;很多持久化框架提供…

ClickHouse基础介绍

目录 前言 1、什么是clickhouse 2、OLAP场景的关键特征 3、列式存储更适合于OLAP场景的原因 4、clickhouse的独特功能 5、clickhouse的缺点 6、性能 6.1、单个大查询的吞吐量 6.2、处理短查询的延迟时间 6.3、处理大量短查询的吞吐量 6.4、数据的写入性能 前言 11月…

Keras实现seq2seq

概述 Seq2Seq是一种深度学习模型&#xff0c;主要用于处理序列到序列的转换问题&#xff0c;如机器翻译、对话生成等。该模型主要由两个循环神经网络&#xff08;RNN&#xff09;组成&#xff0c;一个是编码器&#xff08;Encoder&#xff09;&#xff0c;另一个是解码器…

Dart调用JS对10000条定位数据滤波

使用Dart调用JS&#xff0c;还是为了练习跨语言调用&#xff1b; 一、编写对应的JS代码 平时在开发时不推荐将算法放在JS里&#xff0c;我这里是简单的做一下数据过滤&#xff1b; 首先生成一些随机定位数据&#xff0c;在实际开发中可以使用真实数据&#xff1b; // 随机定…

vmware虚拟机安装esxi7.0步骤

一、安装准备 1、下载镜像文件 下载链接&#xff1a;https://pan.baidu.com/s/12XmWBCI1zgbpN4lewqYw6g 提取码&#xff1a;mdtx 2、vmware新建一个虚拟机 2.1 选择自定义 2.2 选择ESXi对应版本 2.3 选择稍后安装操作系统 2.4 默认选择 2.5 自定义虚拟机名称及存储位置 2…

MyBatis学习二:Mapper代理开发、配置文件完成增删改查、注解开发

前言 公司要求没办法&#xff0c;前端也要了解一下后端知识&#xff0c;这里记录一下自己的学习 学习教程&#xff1a;黑马mybatis教程全套视频教程&#xff0c;2天Mybatis框架从入门到精通 文档&#xff1a; https://mybatis.net.cn/index.html Mapper代理开发 目的 解决…

Jenkins分布式实现: 构建弹性和可扩展的CI/CD环境!

Jenkins是一个流行的开源持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff09;和持续交付&#xff08;Continuous Delivery&#xff0c;CD&#xff09;工具&#xff0c;它通过自动化构建、测试和部署过程&#xff0c;帮助开发团队更高效地交付软件。Jenkins的…

a标签锚点链接 + 遇到的问题

目录 需求背景实现思路遇到的问题问题解决关于锚点链接其他问题 需求背景 页面左侧是一级、二级标题&#xff0c;页面右侧是一级、二级标题对应的内容点击左侧标题&#xff0c;锚点链接&#xff0c;右侧内容跳转到左侧标题对应的内容区域 实现思路 通过 a 标签 id 的方法实现…

嵌入式Linux之Ubuntu学习笔记(Makefile规则格式)

Makefile里面是由一系列的规则组成的&#xff0c;这些规则格式如下&#xff1a; 目标&#xff1a;依赖文件集合 命令1 命令2 …… 列&#xff1a; main&#xff1a;main.o input.o calcu.o gcc -o main main.o input.o calcu.o 命令列表中的每条命令必须以TAB键开始&am…

Mac——VsCode使用格式化工具进行整理和格式化

1. 打开VSCode编辑器。 2. 点击左下角⚙️图标&#xff0c;打开设置 3. 进入设置后&#xff0c;你会看到一个搜索框&#xff0c;在搜索框中输入 format on save 来查找相关设置项。 4. 在设置列表中找到 Editor: Format On Save 选项&#xff0c;勾选它以启用在保存文件时自动格…

LeetCode206链表反转

//我来理解一下运用递归求解 class Solution { public:ListNode* reverseList(ListNode* head) {//首先判断是否为最后一个元素if(head null|| head.next null){return head;//返回末尾元素}ListNode* receive;//此时进入循环的每一层都实现了temp接收head.next的结点进行…

详解bookkeeper AutoRecovery机制

引言小故事 张三在一家小型互联网公司上班&#xff0c;由于公司实行的996&#xff0c;因此经常有同事“不辞而别”&#xff0c;为了工作的正常推进&#xff0c;团队内达成了某种默契&#xff0c;这种默契就是通过某个规则来选出一个同事&#xff0c;这个同事除了工作之余还有额…

让人头痛事务问题到底要如何解决?

前言 正好前段时间我在公司处理过这个问题&#xff0c;我们当时由于项目初期时间比较紧张&#xff0c;为了快速完成业务功能&#xff0c;忽略了系统部分性能问题。项目顺利上线后&#xff0c;专门抽了一个迭代的时间去解决大事务问题&#xff0c;目前已经优化完成&#xff0c;并…

【2024最新版】Win11基础配置操作(磁盘分区、修改各种默认存储位置、安装软件操作)【释放C盘空间】

文章目录 一、硬盘分区0. 磁盘管理1. 压缩卷2. 新建简单卷向导 二、修改默认存储位置1. 保持新内容的地方a. 位置b. 操作 2. 快速访问六件套a. 位置b. 操作 三、安装软件0. 应用商店设置a. 设置中心b. 修改下载设置 1. 微信电脑版设置a. 下载b. 安装c. 聊天记录迁移与备份d. 存…

Charles的基础使用教程【Mac】

目录 1.安装 2.抓取https请求的前置操作 2.1安装证书&#xff1a; 2.2、SSL代理设置 3.Charles初识 1.安装 官网Charles下载安装即可&#xff0c;没有什么需要注意的地方 2.抓取https请求的前置操作 2.1安装证书&#xff1a; 未安装证书是这样的&#xff1a; 上述我们可…