期末考试的那天,有些不爱学习的同学早早的来到教室安排自己的位置,以便考试能蒙混过关,一个监考员知道了这个事,在监考前几分钟,让所有同学按照她的规则调换了位置,教室里刚好有n*n个同学,n行n列。 调换规则如下三步: 在调换位置之前,给每行每列编号:从上往下依次编号1到n行,从左到右依次编号1到n列。从键盘输入n+1行,第一行输入一个正整数n(1<n<=50),然后输入n行,每行n个数(表示这一行n个位置所坐同学的学号(1到n*n),每两个数之间用空格隔开)。 Output Description 输出n行,每行有n个数,每两个数之间用空格隔开,最后一列数后面无空格(切记),这n*n的方阵即最终的考试座次表。
时间: 2024-03-09 12:49:55 浏览: 175
这是一道经典的模拟题目,可以使用二维数组来存储每个同学的座次,然后按照规则进行交换座位,最终输出结果。以下是示例代码:
```python
n = int(input()) # 输入 n
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 % 2 == 1 and seats[i][j] > seats[i-1][j]: # 规则1:奇数行座位号比上一行大
seats[i][j], seats[i-1][j] = seats[i-1][j], seats[i][j]
elif j % 2 == 1 and seats[i][j] > seats[i][j-1]: # 规则2:偶数列座位号比左边列大
seats[i][j], seats[i][j-1] = seats[i][j-1], seats[i][j]
elif i % 2 == 0 and seats[i][j] < seats[i-1][j]: # 规则3:偶数行座位号比上一行小
seats[i][j], seats[i-1][j] = seats[i-1][j], seats[i][j]
elif j % 2 == 0 and seats[i][j] < seats[i][j-1]: # 规则4:奇数列座位号比左边列小
seats[i][j], seats[i][j-1] = seats[i][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)$。
阅读全文