网站要什么,wordpress启用主题,互联网怎么赚钱最快,做软装什么网站可以吗一、问题的提出
n阶蛇形矩阵的特点是按照图1所示的方式排列元素。n阶蛇形矩阵是指矩阵的大小为nn#xff0c;其中n为正整数。
题目背景
一个 n 行 n 列的螺旋矩阵可由如图1所示的方法生成#xff0c;观察图片#xff0c;找出填数规律。填数规则为从 1 开始填到 nn。 图1 …一、问题的提出
n阶蛇形矩阵的特点是按照图1所示的方式排列元素。n阶蛇形矩阵是指矩阵的大小为n×n其中n为正整数。
题目背景
一个 n 行 n 列的螺旋矩阵可由如图1所示的方法生成观察图片找出填数规律。填数规则为从 1 开始填到 n×n。 图1 n 行 n 列的螺旋矩阵(蛇形矩阵) 现在给出矩阵大小 n 以及 i 和 j请你求出该矩阵中第 i 行第 j 列的数是多少。
题目描述
无
输入格式
从标准输入读入数据。 共一行包含三个整数 n1≤n≤1,000、i1≤i≤n、j1≤j≤n每两个整数之间用一个空格隔开分别表示矩阵大小、待求的数所在的行号和列号。
输出格式
输出到标准输出。 一个整数表示相应矩阵中第 i 行第 j 列的数。
输入输出样例
输入 #1复制 8 2 8 输出 #1复制 43 说明/提示
子任务
对于 30% 的测试数据n≤10对于 60% 的测试数据n≤100对于 100% 的测试数据n≤1,000特别地对于 20% 的测试数据ij1。
提示
根据本题的填数规则一个 8×8 的螺旋矩阵应该长这样(如图2所示) 图2 8行8列的螺旋矩阵(蛇形矩阵) 二、解题的思路
由图3可知这是个旋转45º的Z形矩阵当然折返长度是不相等的。仔细看图1发现当向右上方填数时如行号为0则向右(行号不变列号加1)如是列号到n时则向下(列号减1行号加1)然后向左下方填数此时如列号为0则向下如是行号到n时则向右(行号减1列号加1)然后向右一方填数如此重复直到最后行、最后列填完为止。 图3 蛇形矩阵分析图
三、矩阵生成算法
n行n列第一行为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 i1 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 j1 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 i1 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 j1 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])
执行结果