当前位置: 首页 > news >正文

P5731 【深基5.习6】蛇形方阵

题目描述

给出一个不大于 9 9 9 的正整数 n n n,输出 n × n n\times n n×n
的蛇形方阵。

从左上角填上 1 1 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 3 3 个字符,前面使用空格补齐。

输入格式

输入一个正整数 n n n,含义如题所述。

输出格式

输出符合题目要求的蛇形矩阵。

样例 #1

样例输入 #1

4

样例输出 #1

  1  2  3  412 13 14  511 16 15  610  9  8  7

提示

数据保证, 1 ≤ n ≤ 9 1 \leq n \leq 9 1n9

1.题目分析

需要总结数学规律,二维数组就能解决,难在数组的遍历。
题意很简单:一个N乘N的矩阵,从矩阵第一个元素开始,顺时针按顺序打印,从边界到中心,从小到大,直到输出N平方结束。

这里说几个坑:
第一,总结一般规律是要考虑,由于边界缩小带来的条件变化。
第二,就是判断元素向内旋转的时机,这里就简称为拐点,拐点可能不止一个或者两个,不能简单的静态判断,需要使用修改边界之后的边长计算新的拐点。
最后,打印时每个字符占三位:%3d.

2.题目思路

创建一个二维数组用于存储结果,定义一个自然数k作为元素值,初始化为1,
定义x,y记录k-1(这里K表示当前值,K-1表示上一个值)的坐标,
将二维数组的第一个元素初始化为1,
每层打印之后,降维到下一层,这里设置一个自增因子:用于边界判断,
计算第一次边界拐点值:例如:4 * 4的矩阵拐点就为:12,NN就为:(4N-4),

写一个while循环:
1.首先进行拐点判断:计算每一层的拐点值,如果当前的K值等于拐点时,在保证大于零的情况下,边界减二(上下左右边长减一,就是总边长减二),拐点值累加新的边界计算之后的拐点值,自增因子加一。
2.对数字存放的位置进行规律总结判断:
四个判断:

  • 条件一: 若(K-1)在第1行且不在最后一列,则将K填在(K-1)的右一列
  • 条件二 : 若(K-1)在最后一列且不在最后一行,则将K填在(K-1)的正下方
  • 条件三 : 若(K-1)在最后一行且不在第一列,则将K填在(K-1)的左一列
  • 条件四 : 若(K-1)在第一列且不在第一行,则将K填在(K-1)的正上方

满足上述条件则依次存放进二维数组,值得注意的是,需要将每次元素的坐标值手动更新,以便下一次元素存放时判断。
值得一提的是,如果有多层嵌套的情况,这里用自增因子缩小边界值,判断的条件不用改变。
3.判断循环跳出的条件为:大于N的平方

到此,循环结束。
最后,循环遍历二维数组,打印规定的格式即可。

3.代码实现

#include <stdio.h>int main() {int n;//创建一个二维数组int arr[9][9] = {0};scanf("%d", &n);//定义一个自然数kint k = 1;//定义x,y记录k-1的坐标int x, y;x = 0;y = 0;//确定1的位置arr[x][y] = k;//每层打印之后,降维到下一层,这里设置一个自增因子:用于边界判断int cnt = 0;//记录n的值int p = n;//计算第一次边界拐点值int sum = 4 * n - 4;//当k大于n*n时,循环结束while (k < n * n) {//计算每一层的拐点值if (sum == k) {//上下左右边长减一,就是总边长减二,保证边长大于零if (p - 2 > 0) {p -= 2;}//拐点值随着边界缩小而递加sum = sum + (4 * p - 4);//自增因子加一cnt++;}//条件一: 若(K-1)在第1行且不在最后一列,则将K填在(K-1)的右一列//如果有多层嵌套的情况,这里用自增因子缩小边界值,判断的条件不用改变if (x == 0 + cnt && y != n - 1 - cnt) {y += 1;k++;arr[x][y] = k;}//条件二 : 若(K-1)在最后一列且不在最后一行,则将K填在(K-1)的正下方//如果有多层嵌套的情况,这里用自增因子缩小边界值,判断的条件不用改变if (y == n - 1 - cnt && x != n - 1 - cnt) {k++;x++;arr[x][y] = k;}//条件三 : 若(K-1)在最后一行且不在第一列,则将K填在(K-1)的左一列//如果有多层嵌套的情况,这里用自增因子缩小边界值,判断的条件不用改变if (x == n - 1 - cnt && y != 0 + cnt) {k++;y--;arr[x][y] = k;}//条件四 : 若(K-1)在第一列且不在第一行,则将K填在(K-1)的正上方//如果有多层嵌套的情况,这里用自增因子缩小边界值,判断的条件不用改变if (y == 0 + cnt && x != 0 + cnt) {k++;//判断K值是否超出范围if (k > n * n) {break;}x--;arr[x][y] = k;}}//遍历数组,查看结果for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {//%3d占三位printf("%3d", arr[i][j]);}printf("\n");}return 0;
}

相关文章:

P5731 【深基5.习6】蛇形方阵

题目描述 给出一个不大于 9 9 9 的正整数 n n n&#xff0c;输出 n n n\times n nn 的蛇形方阵。 从左上角填上 1 1 1 开始&#xff0c;顺时针方向依次填入数字&#xff0c;如同样例所示。注意每个数字有都会占用 3 3 3 个字符&#xff0c;前面使用空格补齐。 输入格式…...

Python实现GA遗传算法优化循环神经网络回归模型(LSTM回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是由美国的 John holland于20世…...

ESD防静电监控系统在SMT产线中的应用案例

作为电子厂的关键制造环节之一&#xff0c;SMT&#xff08;表面贴装技术&#xff09;产线的效率和质量对企业的竞争力至关重要。为了提高生产线的管理效率和保障生产环境的质量&#xff0c;许多电子厂开始采用MES生产管理系统和ESD防静电监控系统的综合解决方案。 在SMT产线中安…...

Vue+Nodejs+Express+Minio 实现本地图片上传

安装Minio,Minio server和Minio client都要下载可以自定义安装目录 安装完成之后,可以将minio配置成环境变量方便使用 配置了环境变量启动命令式 minio server start,默认账号密码minioadmin和minioadmin,点击9000端口的这个链接,即可访问客户端 nodejs连接Minio,简易服务进…...

em3288 linux_4.19 第一次烧写无法进入内核的情况

1. 情况一&#xff1a; /DDR Version 1.11 20210818 In SRX Channel a: DDR3 400MHz Bus Width32 Col10 Bank8 Row15 CS1 Die Bus-Width16 Size1024MB Channel b: DDR3 400MHz Bus Width32 Col10 Bank8 Row15 CS1 Die Bus-Width16 Size1024MB OUT Boot1 Release Time: Jul 22 2…...

【Java多线程学习5】什么是悲观锁,什么是乐观锁?如何实现乐观锁、乐观锁存在哪些问题

【Java多线程学习5】什么是悲观锁&#xff0c;什么是乐观锁&#xff1f;如何实现乐观锁、乐观锁存在哪些问题 一、什么是悲观锁 概述 悲观锁总是假设最坏的情况&#xff0c;认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改)&#xff0c;所以每次在获取资源操作…...

OSPF协议RIP协议+OSPF实验(eNSP)

本篇博客主要讲解单区域的ospf&#xff0c;多区域的仅作了解。 目录 一、OSPF路由协议概述 1.内部网关协议和外部网关协议 二、OSPF的应用环境 1.从以下几方面考虑OSPF的使用 2.OSPF的特点 三、OSPF重要基本概念 3.1&#xff0c;辨析邻居和邻接关系以及七种邻居状态 3…...

leetcode每日一练-第108题-将有序数组转换为二叉搜索树

一、思路 递归 二、解题方法 在给定中序遍历序列数组的情况下&#xff0c;每一个子树中的数字在数组中一定是连续的&#xff0c;因此可以通过数组下标范围确定子树包含的数字&#xff0c;下标范围记为 [left,right]。对于整个中序遍历序列&#xff0c;下标范围从 left0到 ri…...

王道《操作系统》学习(二)—— 进程管理(二)

2.1 处理机调度的概念、层次 2.1.1 调度的基本概念 2.1.2 调度的三个层次 &#xff08;1&#xff09;高级调度&#xff08;作业调度&#xff09; &#xff08;2&#xff09;中级调度&#xff08;内存调度&#xff09; 补充知识&#xff1a;进程的挂起状态和七状态模型 &#x…...

Vulnhub: shenron: 3靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.171 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.171 修改hosts后访问目标80端口&#xff0c;发现是wordpress wpscan收集目标用户&#xff0c;爆破出密码&#xff1a;ilov…...

Kubernetes高可用集群二进制部署(二)ETCD集群部署

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…...

mysql主从复制及原理

目录 主从复制原理实现主从复制 主从复制原理 主要基于MySQL二进制日志 主要包括三个线程&#xff08;2个I/O线程&#xff0c;1个SQL线程&#xff09; 1、MySQL将数据变化记录到二进制日志中&#xff1b; 2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中&#xff1b; …...

MQTT服务器详细介绍:连接物联网的通信枢纽

随着物联网技术的不断发展&#xff0c;MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议作为一种轻量级、可靠、灵活的通信协议&#xff0c;被广泛应用于物联网领域。在MQTT系统中&#xff0c;MQTT服务器扮演着重要的角色&#xff0c;作为连接物联网设备和…...

通过VBA宏合并Excel工作表

工作中经常会用到的把几个Excel文件合并到一个&#xff0c;或者是把一个Excel文件里的所有Sheet合并到一个Sheet来进行统计。下面分别提供用vba宏来解决这两个问题的方法。 1、合并Excel文件 打开一个空Excel文件&#xff0c;AltF11&#xff0c;插入一个模块&#xff0c;开始…...

Mac 定时重启 TouchBar 脚本(缓解闪烁问题)

背景 Mac 笔记本 TouchBar 是真的脆啊&#xff0c;合盖使用一段时间就废了&#xff0c;右侧一直闪烁简直亮瞎眼 &#x1f602; 经过观察&#xff0c;总结出闪烁规律如下&#xff1a; 工作状态&#xff1a;不断操作电脑时&#xff0c;触控栏处于工作状态&#xff0c;几乎不闪…...

Redis主从复制、哨兵机制、集群分片

目录 一.主从复制 1.概述 2.主从架构相比于单点架构的优势 3.主从复制原理和工作流程 第一次同步 第一阶段&#xff1a;建立链接、协商同步 第二阶段&#xff1a;主服务器同步数据给从服务器 第三阶段&#xff1a;主服务器发送新写操作命令给从服务器 基于长连接的命…...

字段填充策略 FieldFill

实体类中有如下属性&#xff0c;通过上面的自动填充属性&#xff0c;我们可以实现在进行插入&#xff08;insert&#xff09;操作时对添加了注解TableField(fill FieldFill.INSERT)的字段进行自动填充&#xff08;解释&#xff1a;后面会写配置自动填充的配置类&#xff0c;该…...

Docker run 启动容器报错

今天在Windows下启动docker容器发现的三个错误&#xff1a; Ports are not available: exposing port TCP 0.0.0.0:1521 -> 0.0.0.0:0: listen tcp 0.0.0.0:1521: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. 端口…...

Golang之路---03 面向对象——类型断言

类型断言 作用 检查 i 是否为 nil检查 i 存储的值是否为某个类型 使用方式 第一种&#xff1a; t : i.(T)这个表达式可以断言一个接口对象&#xff08;i&#xff09;里不是 nil&#xff0c;并且接口对象&#xff08;i&#xff09;存储的值的类型是 T&#xff0c;如果断言成…...

Atcoder 做题记录

My OI Blog A R C 155 F \mathbb{ARC \ 155 \ F} ARC 155 F E, F 先咕着&#xff0c;做一些多项式题&#xff0c;这篇题解是我人工翻译的 [1] Double Counting 双重计数 考虑从叶子节点开始&#xff0c;用唯一的方式&#xff08;如果有的话&#xff09;来构造出一棵满足条件的树…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...