【算法题】螺旋矩阵III (求解n阶蛇形矩阵)

一、问题的提出

n阶蛇形矩阵的特点是按照图1所示的方式排列元素。n阶蛇形矩阵是指矩阵的大小为n×n,其中n为正整数。

题目背景

一个 n  n 列的螺旋矩阵可由如图1所示的方法生成,观察图片,找出填数规律。填数规则为从 1 开始填到 n×n

图1  n  n 列的螺旋矩阵(蛇形矩阵)

 现在给出矩阵大小 n 以及 i  j,请你求出该矩阵中第 i 行第 j 列的数是多少。

题目描述

输入格式

从标准输入读入数据。 共一行,包含三个整数 n1n1,000)、i1in)、j1jn),每两个整数之间用一个空格隔开,分别表示矩阵大小、待求的数所在的行号和列号。

输出格式

输出到标准输出。 一个整数,表示相应矩阵中第 i 行第 j 列的数。

输入输出样例

输入 #1复制

8 2 8

输出 #1复制

43

说明/提示

子任务

  • 对于 30% 的测试数据,n10
  • 对于 60% 的测试数据,n100
  • 对于 100% 的测试数据,n1,000
  • 特别地,对于 20% 的测试数据,i=j=1

提示

根据本题的填数规则,一个 8×8 的螺旋矩阵应该长这样(如图2所示):

图2 88列的螺旋矩阵(蛇形矩阵)

 二、解题的思路

由图3可知,这是个旋转45º的Z形矩阵,当然折返长度是不相等的。仔细看图1发现:当向右上方填数时,如行号为0则向右(行号不变,列号加1),如是列号到n时则向下(列号减1,行号加1),然后向左下方填数,此时,如列号为0则向下,如是行号到n时则向右(行号减1,列号加1),然后向右一方填数,如此重复直到最后行、最后列填完为止。

图3 蛇形矩阵分析图

三、矩阵生成算法

nn列,第一行为0行,第一列为0列。从(0,0)1开始,方向设为从左下往右上。

当从左下往右上时,如行号已为0则列号加1方向向反(从右上往左下),否则行号减1,列号加1,如列号达n则列号为n-1,行号加1方向向反(从右上往左下)

当从右上往左下时,如列号已为0则行号加1方向向反(从左下往右上),否则行号加1,列号减1,如行号达n则列号加1,行号为n-1方向向反(从左下往右上)

当行号和列号都为n-1时结束。

程序代码如下:

def prt(hm):                 # 打印二维列表for i in range(N):for j in range(N):print("%3d" % hm[i][j], end='')print()def Helix_MatrixII(n):cnt = 1i = j = 0k = 1while True:matrix[i][j] = cntif i == n-1 and j == n-1:breakif k == 1:           # 从左下往右上 if i == 0 :j += 1if j >= n:j = n-1i = i+1 if i < n -1 else n-1k = -1elif j == n-1:i += 1k = -1else:i -= 1j += 1else:                # 从右上往左下if j == 0 :i += 1if i >= n:i = n-1j = j+1 if j < n -1 else n-1k = 1elif i == n-1:j += 1k = 1else:i += 1j -= 1cnt += 1N = 7
matrix = []             # 初始化二维矩阵matrix(二维列表)
for i in range(N):matrix.append([])for j in range(N):matrix[i].append(0)
Helix_MatrixII(N)
prt(matrix)

执行结果:

 四、题目求解算法

题目要求输入矩阵规模n和坐标(i, j)三个参数,求出矩阵(i, j)处的元素值。所以先按n求出矩阵,现按坐标输出元素值。

程序代码如下:

def Helix_MatrixII(n):cnt = 1i = j = 0k = 1while True:matrix[i][j] = cntif i == n-1 and j == n-1:breakif k == 1:        # 从左下往右上if i == 0 :j += 1if j >= n:j = n-1i = i+1 if i < n -1 else n-1k = -1elif j == n-1:i += 1k = -1else:i -= 1j += 1else:             # 从右上往左下if j == 0 :i += 1if i >= n:i = n-1j = j+1 if j < n -1 else n-1k = 1elif i == n-1:j += 1k = 1else:i += 1j -= 1cnt += 1N, x, y = map(int, input().split())
matrix = []               # 初始化二维矩阵matrix(二维列表)
for i in range(N):matrix.append([])for j in range(N):matrix[i].append(0)
Helix_MatrixII(N)
print(matrix[x-1][y-1])

执行结果:

 

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

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

相关文章

【配置环境】Linux下安装MySQL

目录 一&#xff0c;环境 二&#xff0c;安装步骤 1.使用包管理器安装MySQL 2.配置MySQL的安全选项 3.设置root用户使用密码进行身份验证&#xff08;可选&#xff09; 三&#xff0c;拓展知识 1.如何修改MySQL的密码策略&#xff1f; 2.实现连接MySQL数据库的测试代码…

TiDB基础介绍、应用场景及架构

1. 什么是newsql NewSQL 是对各种新的可扩展/高性能数据库的简称&#xff0c;这类数据库不仅具有NoSQL对海量数据的存储管理能力&#xff0c;还保持了传统数据库支持ACID和SQL等特性。 NewSQL是指这样一类新式的关系型数据库管理系统&#xff0c;针对OLTP&#xff08;读-写&…

经验分享:企业数据仓库建设方案总结!

导读 在企业的数字化转型浪潮中&#xff0c;数据被誉为“新时代的石油”&#xff0c;而数据仓库作为数据管理与分析的核心基础设施&#xff0c;在企业的信息化建设中扮演着重要的角色。本文将深入探讨企业数据仓库建设过程中所遇到的问题以及解决经验&#xff0c;为正在筹备或…

进程/线程上下文切换会用掉你多少CPU?

进程是操作系统的伟大发明之一&#xff0c;对应用程序屏蔽了CPU调度、内存管理等硬件细节&#xff0c;而抽象出一个进程的概念&#xff0c;让应用程序专心于实现自己的业务逻辑既可&#xff0c;而且在有限的CPU上可以“同时”进行许多个任务。但是它为用户带来方便的同时&#…

嵌入式Linux Qt5 (C++)开发栏目概述

本栏目开始介绍Linux系统下的Qt C程序开发&#xff0c;资源是以嵌入式为切入点&#xff08;现在Linux系统下的Qt C程序开发好像就是应用于嵌入式&#xff09;&#xff0c;那就跟着一起学习Linux系统下的Qt C程序开发知识&#xff0c;再扩展一下嵌入式的知识吧。我这里默认已经熟…

php初解

php是什么&#xff1f; PHP&#xff0c;全称 Hypertext Preprocessor &#xff0c;中文翻译“超文本预处理器”。 PHP是一种被广泛应用的开源通用脚本语言&#xff0c;尤其适用于 Web 开发。 拥有快速&#xff0c;灵活&#xff0c;实用的特点&#xff0c;PHP能做任何事&#xf…

ORACLE中UNION、UNION ALL、MINUS、INTERSECT学习

1、UNION和UNION ALL的使用与区别 如果我们需要将两个select语句的结果作为一个整体显示出来&#xff0c;我们就需要用到union或者union all关键字。union的作用是将多个结果合并在一起显示出来。 union和union all的区别是union会自动压缩多个结果集合中的重复结果&#xff…

高速下载VisualGLM模型文件的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

GO语言自底向上优化

Go Ballast(通过尝试降低 GC 频率以提高整体性能&#xff0c;针对所有 Go应用都适用) 首先我们明白GO语言GC触发条件是由比例来触发的。例如&#xff0c;当前存活内存10GB&#xff0c;触发比例是100%&#xff0c;因此下次触发GC的时候是当内存达到20GB的时候触发GC。这种机制在…

碎片笔记|图数据与图神经网络基础介绍

前言&#xff1a;前段时间了解了一下图神经网络&#xff0c;本篇博客记录一下相关知识&#xff0c;以备不时之需。 强烈推荐这篇博客&#xff08;作者来自 Google Research&#xff09;&#xff0c;个人认为是图神经网络基础入门的不二选择&#xff01; 目录 一、图数据1.1 定义…

Windows上使用FFmpeg实现本地视频推送模拟海康协议rtsp视频流

场景 Nginx搭建RTMP服务器FFmpeg实现海康威视摄像头预览&#xff1a; Nginx搭建RTMP服务器FFmpeg实现海康威视摄像头预览_nginx rtmp 海康摄像头_霸道流氓气质的博客-CSDN博客 上面记录的是使用FFmpeg拉取海康协议摄像头的rtsp流并推流到流媒体服务器。 如果在其它业务场景…

TCP/IP协议组

TCP/IP通信协议是目前最完整、使用最广泛的通信协议。它的魅力在于可使不同硬件结构、不同操作系统的计算机相互通信。TCP/IP协议既可用于广域网&#xff0c;也可用于局域网&#xff0c;它是Internet/Intranet的基石。TCP/IP通信协议事实上是一组协议。 TCP/IP协议可分为5层也可…

使用 Redis 实现共享 Session 的高效解决方案

系列文章目录 文章目录 系列文章目录前言一、为什么需要共享 Session?二、使用 Redis 实现共享 Session1.安装和配置 Redis2.实现 Session 存取操作3.使用 Session 数据三、测试共享 Session四、注意事项总结前言 在分布式系统中,实现共享 Session 是一个重要的问题。本文将…

GT Code - 图译算法编辑器(集成QT、C++、C、Linux、Git、java、web、go、高并发、服务器、分布式、网络编程、云计算、大数据项目)

目录 项目概述 发文意义 项目介绍 功能分析 设计概要 功能展示 项目文档 项目概述 “GT Code 图译算法编辑器”是一款跨平台、轻量级的代码编辑器&#xff0c;主要面向软件开发人员&#xff0c;它实现了编辑、编译、绘制代码流程图、生成调试演示动画等功能&#xff0c;以…

go版本glog/klog 参数使用方法心得

问题 glog很好用&#xff0c;但是官方文档却很烂&#xff0c;对于很多参数并没有做详细说明&#xff0c;于是通过看源码测试&#xff0c;总结出以下使用方法 可选参数 flag.BoolVar(&logging.toStderr, "logtostderr", false, "log to standard error in…

空间分析专属 Python 学习资料

空间数据分析能够帮助我们更好地理解地理空间中的模式和关系&#xff0c;从而为决策提供支持。例如&#xff0c;城市规划者可以使用空间数据分析来确定城市发展的最佳方向&#xff0c;环境科学家可以使用空间数据分析来评估污染的影响&#xff0c;而商业分析师可以使用空间数据…

react go实现用户历史登录列表页面

refer: http://ip-api.com/ 1.首先需要创建一个保存用户历史的登录的表&#xff0c;然后连接go 2.在用户登录的时候&#xff0c;获取用户的IP IP位置&#xff0c;在后端直接处理数据即可&#xff08;不需要在前端传递数据&#xff09; &#xff08;1&#xff09;增加路由&am…

使用Java服务器实现UDP消息的发送和接收(多线程)

目录 简介&#xff1a;1. 导入必要的库2. 创建服务器端代码3. 创建客户端代码4. 实现多线程处理5. 测试运行示例代码&#xff1a;函数说明服务器端代码说明&#xff1a;客户端代码说明&#xff1a; 总结&#xff1a; 简介&#xff1a; 在本篇博客中&#xff0c;我们将介绍如何…

genism word2vec方法

文章目录 概述使用示例模型的保存与使用训练参数详解&#xff08;[原链接](https://blog.csdn.net/weixin_44852067/article/details/130221655)&#xff09;语料库训练 概述 word2vec是按句子来处理的Sentences(句子们) 使用示例 from gensim.models import Word2Vec #sent…

《起风了》C++源代码

使用方法 Visual Studio、Dev-C、Visual Studio Code等C/C创建一个 .cpp 文件&#xff0c;直接粘贴赋值即可。 #include <iostream> #include <Windows.h> #pragma comment(lib,"winmm.lib") using namespace std; enum Scale {Rest 0, C8 108, B7 …