北航OJ 转圈圈问题

Posted endevelop-gw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了北航OJ 转圈圈问题相关的知识,希望对你有一定的参考价值。

本题要求你输出一个尺寸为d×d的数阵,数字的排列方式是从1到n循环且顺时针转圈,看样例输出。
输入
两行,第一行是正整数n(n<10),第二行是正整数d(d<20)
?
输出
转圈圈的数阵
?
输入样例1
6
4
输出样例1
1 2 3 4
6 1 2 5
5 4 3 6
4 3 2 1
?
输入样例2
5
5
输出样例2
1 2 3 4 5
1 2 3 4 1
5 4 5 5 2
4 3 2 1 3
3 2 1 5 4

循环可以通过对数取模得到。矩阵可以用二维数组模拟。
麻烦在于模拟人转圈写数的过程,可以将每一圈看作一个循环。用一个变量n来标记写数的次数,当写数次数用尽时,循环结束。
奇数的情况下,正中间的最后一个数会出现问题,可以在最后加一个if语句进行完善。
这里用python实现。

a=int(input())
b=int(input())
c=[]
n=b**2
x=b
t=1
line=x
# 生成n*n维数组
for i in range(b):
    c.append([])
for i in range(b):
    for j in range(b):
        c[i].append(0)
while n:
    for j in range(2*x-b-1):
        c[b-x][j+b-x]=t
        n-=1
        t+=1
    for j in range(2*x-b-1):
        c[j+b-x][x-1]=t
        n-=1
        t+=1
    for j in range(2*x-b-1):
        c[x-1][x-1-j]=t
        n-=1
        t+=1
    for j in range(2*x-b-1):
        c[x-j-1][b-x]=t
        n-=1
        t+=1
    x-=1
    if b%2!=0 and n==1:
        c[int((b-1)/2)][int((b-1)/2)]=b**2
        n-=1
for i in range(b):
    for j in range(b):
        c[i][j]=str((c[i][j]-1)%a+1)
for i in range(b):
    c[i]=' '.join(c[i])
    print(c[i])

以上是关于北航OJ 转圈圈问题的主要内容,如果未能解决你的问题,请参考以下文章

九度oj 题目1397:查找数段

《程序员代码面试指南》第八章 数组和矩阵问题 转圈打印矩阵

学习总结(北航助教陈彦吉)

北航数模21中青杯 B题 港珠澳大桥桥梁设计与安全策略 A题汽车组装车间流水线问题

北航数模21中青杯 B题 港珠澳大桥桥梁设计与安全策略 A题汽车组装车间流水线问题

北航数模21中青杯 B题 港珠澳大桥桥梁设计与安全策略 A题汽车组装车间流水线问题