期末考试的那天,有些不爱学习的同学早早的来到教室安排自己的位置,以便考试能蒙混过关,一个监考员知道了这个事,在监考前几分钟,让所有同学按照她的规则调换了位置,教室里刚好有nn个同学,n行n列。 调换规则如下三步: 在调换位置之前,给每行每列编号:从上往下依次编号1到n行,从左到右依次编号1到n列。从键盘输入n+1行,第一行输入一个正整数n(1<n<=50),然后输入n行,每行n个数(表示这一行n个位置所坐同学的学号(1到nn),每两个数之间用空格隔开)。 Output Description 输出n行,每行有n个数,每两个数之间用空格隔开,最后一列数后面无空格(切记),这n*n的方阵即最终的考试座次表。
时间: 2024-03-09 20:50:00 浏览: 163
感谢提醒,非常抱歉之前的回答有误。以下是修正后的代码:
```python
n = int(input())
seats = [[0] * n for _ in range(n)]
for i in range(n):
line = input().split()
for j in range(n):
seat_num = int(line[j])
row, col = (seat_num - 1) // n, (seat_num - 1) % n
seats[row][col] = seat_num
for i in range(n):
for j in range(n):
if (i + j) % 2 == 1: # 奇数行列
# 与左上角的位置交换
if i > 0 and j > 0:
seats[i][j], seats[i-1][j-1] = seats[i-1][j-1], seats[i][j]
# 与右下角的位置交换
elif i < n-1 and j < n-1:
seats[i][j], seats[i+1][j+1] = seats[i+1][j+1], seats[i][j]
else: # 偶数行列
# 与右上角的位置交换
if i > 0 and j < n-1:
seats[i][j], seats[i-1][j+1] = seats[i-1][j+1], seats[i][j]
# 与左下角的位置交换
elif i < n-1 and j > 0:
seats[i][j], seats[i+1][j-1] = seats[i+1][j-1], seats[i][j]
for i in range(n):
for j in range(n):
print(seats[i][j], end=' ' if j < n-1 else '') # 控制每个数之间是否有空格
print() # 每行结束后换行
```
时间复杂度为 $O(n^2)$,空间复杂度为 $O(n^2)$。
阅读全文