针对CSP-J/S的冲刺练习:Day 4 提高题

一、审题

时间限制:1000ms                内存限制:256MB                平均AC率:7.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/599737.shtml

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

相关文章

【电路笔记】-电感器

电感器 文章目录 电感器1、概述2、电感器的时间常数3、电感器示例1 电感器是一种由线圈组成的无源电气元件&#xff0c;其设计目的是利用电流通过线圈而产生的磁力和电力之间的关系。 1、概述 在本中&#xff0c;我们将看到电感器是一种电子元件&#xff0c;用于将电感引入到电…

使用Apache Commons Chain实现命令模式

第1章&#xff1a;引言 大家好&#xff0c;我是小黑。今天咱们来聊聊一个挺有意思的话题&#xff1a;如何用Apache Commons Chain实现命令模式。首先&#xff0c;得先搞明白什么是命令模式&#xff0c;对吧&#xff1f;命令模式&#xff0c;它其实是一种设计模式&#xff0c;主…

嵌入式科普(9)vscode无法跳转和恢复默认配置

一、目的/概述 二、解决办法 2.1 使能Intelli Sense Engine 2.2 vscode恢复默认配置 2.3 c/c与clangd冲突 嵌入式科普(9)vscode无法跳转和恢复默认配置 一、目的/概述 1、2024年的第一天突然vscode无法跳转,莫名其妙 2、尝试了各种设置和插件都无效&#xff0c;卸…

Ubuntu18.04 安装 qt 5.15.2

安装qt 1.下载 在线安装包 使用国内镜像源在线安装QT(2023.3.25更新)_qt国内镜像-CSDN博客 2.安装 注意&#xff1a;我安装时 勾选 Qt Design studio 会导致报错&#xff0c;直接不勾选。 Ubuntu 18.04 安装Qt5.15.2开发环境_ubuntu安装qt5.15.2-CSDN博客 3.配置

【持续学习系列(八)】《Continual Learning Through Synaptic Intelligence》

一、论文信息 1 标题 Continual Learning Through Synaptic Intelligence 2 作者 Friedemann Zenke, Ben Poole, Surya Ganguli 3 研究机构 Stanford University 二、主要内容 论文探讨了如何在人工神经网络&#xff08;ANNs&#xff09;中实现持续学习&#xff08;con…

英飞凌TC3xx之一起认识GTM(十)详细说说GTM子模块TIM

英飞凌TC3xx之一起认识GTM(十)详细说说GTM子模块TIM 1 TIM简介1.1 输入源选择寄存器INPUTSRCx1.2 外部捕捉源选择寄存器 EXTCAPSRCx2 TIM通道2.1 TIM通道架构2.2 TIM通道模式3 总结编者话:GTM的定时器输入模块TIM是经常被使用的模块,因为它简单易用。它可以接入多种源,包括…

Qt元对象系统Meta-Object System

元对象系统 元对象系统是一个基于标准C++的扩展,为Qt提供了信号与槽机制、实时类型信息、动态属性系统。 元对象系统的三个基本条件:类必须继承自QObject、类声明Q_OBJECT宏、元对象编译器moc。 Qt元对象编译器(Moc)是Qt框架中的一个重要工具,用于处理Qt特有的元对象系统…

快递物流怎么寄最便宜?你一定要知道的5个方法 !

家人们&#xff0c;临近年关&#xff0c;大家的钱包是不是鼓鼓的了&#xff0c;难免的亲戚朋友之间会相互寄送一些东西&#xff0c;所以最近因为需要经常寄快递物流&#xff0c;小编所以特地整理了5个我们平时个人寄快递便宜的方法攻略&#xff0c;推荐第五个&#xff0c;实用干…

【Java集合篇】HashMap 在 get 和 put 时经过哪些步骤

HashMap在get和put时经过哪些步骤? ✔️ 典型解析✔️get方法✔️put方法✔️ 拓展知识仓✔️ HashMap如何定位key✔️ HashMap定位tablelndex的骚操作作✔️HashMap的key为null时&#xff0c;没有hashCode是如何存储的?✔️ HashMap的value可以为null吗? 有什么优缺点讷? …

群太多,有什么办法可以定时、批量、标签分类群发的吗?

你或许会遇到微信群组过多而导致管理困难等问题吗&#xff1f;对于如何高效地管理众多微信群组&#xff0c;实现分类管理同样具有不可忽视的重要性。 实际上&#xff0c;对此问题小编收到了部分朋友的疑问&#xff1a;“既然可以为微信好友添加标签&#xff0c;那为何不能为微…

数据库定义和操作语句的重要语法

数据库&#x1f4ca;的10种语法 数据查询语句 select : 用于从数据库中检索数据。 select column1, column2,.... from table_name where condition; select distinct : 用于从数据库中检索唯一的数据值。 select DISTINCT column1, clumn2,... from table_name; 工作原理…

torch.meshgrid和np.meshgrid的区别

numpy中meshgrid&#xff1a; 把数组a当作一行&#xff0c;再根据数组b的长度扩充行。 把数组b当作一列&#xff0c;再根据数组a的长度扩充列。 torch中meshgrid&#xff1a; 把数组a当作一列&#xff0c;再根据数组b的长度扩充列。 把数组b当作一行&#xff0c;再根据数组a的…

CAVER: Cross-Modal View-Mixed Transformer for Bi-Modal Salient Object Detection

目录 一、论文阅读笔记&#xff1a; 1、摘要&#xff1a; 2、主要贡献点&#xff1a; 3、方法&#xff1a; 3.1 网络的总体框架图&#xff1a; 3.2 Transformer-based Information Propagation Path (TIPP) 3.3 Intra-Modal/Cross-Scale Self-Attention (IMSA/CSSA) Q1…

onxxruntime使用cuda以及tensorrt进行加速

1、版本匹配 版本需要匹配&#xff0c;不然运行会报错 2、onnxruntime之tensorrt加速 方式一&#xff1a; OrtTensorRTProviderOptions trt_options{}; trt_options.trt_max_workspace_size 2147483648; trt_options.trt_max_partition_iterations 10; trt_options.trt_m…

kali-Linux安装ARL灯塔教程以及timeout of 20000ms exceeded 的解决方法

FLAG&#xff1a;别和妈妈诉苦&#xff0c;她帮不上&#xff0c;也睡不着。 专研方向: docker&#xff0c;ARL资产灯塔系统 每日emo&#xff1a;天冷了&#xff0c;你还在坚持吗&#xff1f; 欢迎各位与我这个菜鸟交流学习 kali安装ARL灯塔教程 1.安装docker环境&#xff0c;…

【MySQL】orderby/groupby出现Using filesort根因分析及优化

序 在日常的数据库运维中&#xff0c;我们可能会遇到一些看似难以理解的现象。比如两个SQL查询语句&#xff0c;仅仅在ORDER BY子句上略有不同&#xff0c;却造成了性能的天壤之别——一个飞速完成&#xff0c;一个则让数据库崩溃。今天就让我们围绕这个问题&#xff0c;深入剖…

LeetCode每日一题 | 1944. 队列中可以看到的人数

文章目录 队列中可以看到的人数题目描述问题分析程序代码&#xff08;Golang 版本&#xff09; 队列中可以看到的人数 题目描述 原题链接 有 n 个人排成一个队列&#xff0c;从左到右 编号为 0 到 n - 1 。给你以一个整数数组 heights &#xff0c;每个整数 互不相同&#xff…

Mysql的安装配置教程(非常详细)从零基础入门到精通,看完这一篇就够了

首先简单概述分为几个步骤&#xff1a; 一、下载Mysql 二、安装Mysql 三、验证Mysql安装是否成功 四、 配置环境变量 五、验证配置环境变量是否成功 一、下载Mysql 要在Windows或Mac上安装MySQL&#xff0c;首先从MySQL官方网站下载最新的MySQL Community Server版本&am…

QCharView使用

QChart是 QGraphicsWidget的子类。 QCharView是QGraphicsView的子类 QCharView概念:title、系列、图标Chart、视图 说明: 需要添加Qt组件charts 在使用QChart或者QChartView之前需要添加宏定义QT_CHARTS_USE_NAMESPACE &#xff08;其实是使用了命名空间&#xff09;&#xff…

Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机掉线自动重连&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的图像转换为OpenCV的Mat图像的技术背景在NEOAPI SDK里实现相机图像转换为Mat图像格式联合OpenCV实现相机图像转换为Mat图像格式测试演示图 工业相机…