A25772. 提示信息:回形取数,是沿着一个数字矩阵的左上角向下开始移动取数,当前方没有数字或者数字已经被取过,就会左转继续移动取数,当没有数可取时回形取数结束。如下图所示:回形取数结束后会产生一条线路图,也就是数字线路,上图的数字线路为:1,5,9,13,14,15,16,12,8,4,3,2,6,10,11,7编程实现:用户分别输入两个正整数,第一个数代表数字矩阵的行数,第二个数代表数字矩阵的列数,数字矩…
填空题
困难
知识点
题目描述
提示信息:
回形取数,是沿着一个数字矩阵的左上角向下开始移动取数,当前方没有数字或者数字已经被取过,就会左转继续移动取数,当没有数可取时回形取数结束。如下图所示:

回形取数结束后会产生一条线路图,也就是数字线路,上图的数字线路为:1,5,9,13,14,15,16,12,8,4,3,2,6,10,11,7
编程实现:
用户分别输入两个正整数,第一个数代表数字矩阵的行数,第二个数代表数字矩阵的列数,数字矩阵的数字为从1开始的正整数。根据回形取数规则将最终的数字线路输出(数字线路中的每个数字之间需要有一个英文逗号格隔开)。
例如:
输入的是2和3数字矩阵为:
1 2 3
4 5 6数字线路为:1,4,5,6,3,2
输入的是4和3数字矩阵为:
1 2 3
4 5 6
7 8 9
10 11 12数字线路为:1,4,7,10,11,12,9,6,3,2,5,8
(注:数字矩阵不需要输入,此处只为展示)
输入描述:
第一行输入一个正整数作为行数
第二行输入一个正整数作为列数
输出描述:
根据回形取数规则将数字线路输出(数字线路中的每个数字之间需要有一个英文逗号隔开)
样例输入:
3
2样例输出:
1,3,5,6,4,2参考答案
b = int(input())
a = int(input())
sz = []
x = 1
for i in range(b):
sz.append([])
for j in range(a):
sz[-1].append(x)
x += 1
# for i in sz:
# for j in i:
# print(j, end="\t")
# print()
x = 0
y = 0
z = 0
stop = a * b
read = []
readed = 0
while True:
for i in range(z,b - z):
if sz[x][y] not in read:
read.append(sz[x][y])
readed += 1
x += 1
x -= (1)
for i in range(z,a - z):
if sz[x][y] not in read:
read.append(sz[x][y])
readed += 1
y += 1
y -= (1)
for i in range(z,b - z):
if sz[x][y] not in read:
read.append(sz[x][y])
readed += 1
x -= 1
x += (1)
for i in range(z,a - z):
if sz[x][y] not in read:
read.append(sz[x][y])
readed += 1
y -= 1
y += (1)
if readed >= stop:
break
z += 1
x = z
y = z
print(",".join(map(str, read)))答案解析
评判标准:
20分:能正确输出一组数据;
20分:能正确输出两组数据;
20分:能正确输出三组数据;
20分:能正确输出四组数据;
20分:能正确输出五组数据。
上一题
下一题