假设有一个n 行m 列的表格,可以分成n✖️m 个块。
一个矩形n行m列,可以看作分为n✖️m个大小为一的正方形块。计算输出对角线上经过的块的数量。
例如:输入3,4。应该输出6
n和m中的任一个数为1,那么对角线只会经过一个块,即n * m。gcd(n, m) 表示n和m的最大公约数。import math
def count_diagonal_blocks(n, m):
if n == 1 or m == 1:
return n * m
else:
return n + m - math.gcd(n, m)
# 输入表格的大小
n = 3
m = 4
# 计算对角线上经过的块的数量
diagonal_blocks = count_diagonal_blocks(n, m)
print("对角线上经过的块的数量:", diagonal_blocks)
输入一个字符串列表,表示一个迷宫。
j 表示墙,空格表示可以进入,k表示人的起始位置。例如,输人[“j jj”,”j kj”,”jjjj”]。输出true
如果只有一个元素k时,也输出true
如果外围一圈全是墙j的话,则也是false
def can_escape_maze(maze):
if not maze:
return False
def dfs(x, y):
if x < 0 or x >= len(maze) or y < 0 or y >= len(maze[0]) or maze[x][y] == 'j':
return False
if maze[x][y] == ' ':
return True
maze[x] = maze[x][:y] + 'j' + maze[x][y + 1:]
if (dfs(x + 1, y) or
dfs(x - 1, y) or
dfs(x, y + 1) or
dfs(x, y - 1)):
return True
return False
# 检查外围一圈是否都是墙
for i in range(len(maze)):
if i == 0 or i == len(maze) - 1:
for j in range(len(maze[i])):
if maze[i][j] != 'j':
return False
else:
if maze[i][0] != 'j' or maze[i][-1] != 'j':
return False
# 找到起始位置
for i in range(1, len(maze) - 1):
for j in range(1, len(maze[i]) - 1):
if maze[i][j] == 'k':
return dfs(i, j)
return False
# 输入迷宫
maze = [
"jjjjjjjj",
"j j jj j",
"j jkj j",
"j j j jj",
"j j j j",
"j jj",
"jjjjjjjj"
]
# 检查是否可以走出迷宫
result = can_escape_maze(maze)
print(result)
输入一个 n✖️n 大小的数组,需要按照从外到里的方向顺时针排列输出。
按照从外到里的顺时针方向,依次遍历矩阵的外围元素,然后逐层向内遍历
def spiral_order(matrix):
if not matrix:
return []
result = []
while matrix:
# 从左到右
result += matrix[0]
# 从上到下
if len(matrix) > 1:
for row in matrix[1:-1]:
if row:
result.append(row[-1])
# 从右到左
if len(matrix) > 1:
result += matrix[-1][::-1]
# 从下到上
if len(matrix) > 2:
for row in matrix[-2:0:-1]:
if row:
result.append(row[0])
# 剔除已经遍历的外围元素
matrix = matrix[1:-1]
for i in range(len(matrix)):
if matrix[i]:
matrix[i] = matrix[i][1:-1]
return result
# 输入矩阵
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 获取顺时针排列的结果
result = spiral_order(matrix)
print(result)