有這樣乙個題:
輸入n,假設n=4,輸出
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
1、根據行來分隔,將每一行作為乙個子列表放入列表l,而子列表的元素是每一行的數字。那每個數字都對應乙個座標值(x,y),我們只需要順時針依次填數即可
2、首先建立全為0的目標矩陣
l = [[0 for i in range(num)] for i in range(num)]
3、第乙個數的座標是(0,n-1)【l的第乙個元素中的最後乙個元素,也就是第一行的最後乙個數】,那下乙個數就應該在x座標上加1。那現在有兩個問題,如何控制轉彎以及座標遞增遞減的規律
4、首先說明遞增遞減的規律:
5、座標變化規律控制:每次按照上次的方向走,如果數字為0(第二步已經建立了全為0的矩陣)或者程式異常(超出索引值),則表示需要轉彎了
def next_cursor(c, cursor): #計算下乙個座標位置
if c%4 == 0: #右
return (cursor[0], cursor[1]+1)
elif c%4 == 1: #下
return (cursor[0]+1, cursor[1])
elif c%4 == 2: #左
return (cursor[0], cursor[1]-1)
elif c%4 == 3: #上
return (cursor[0]-1, cursor[1])
def annular(num):
c = 1 #對4求餘,判斷前進方向,0--3分別表示 右下左上
cursor = (0, num-1) #起始數x、y座標
l = [[0 for i in range(num)] for i in range(num)] #構建目標矩陣
i = 1 #從1開始
while 1:
try:
if l[cursor[0]][cursor[1]] == 0: #如果當前座標為0,則賦值,否則轉彎
l[cursor[0]][cursor[1]] = i
cursor_now = cursor #備份合法位置
cursor = next_cursor(c, cursor)
i += 1
if i > num**2:
break
else: #若已存在值,則轉彎
c += 1
cursor = next_cursor(c, cursor_now)
except: #若超出範圍,也轉彎
c += 1
cursor = next_cursor(c, cursor_now)
return l
#格式化調列印結果
l = annular(10)
for line in l:
for i in line:
print('%3d' % i, end='')
print()
列印數字回環
題目要求 input a value n,then print out a n n matrix.example 1 input 2,output 1 24 3 example2 input 5,output 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 2...
written amount 列印數字)
include include include static char digits static char tens static char magnitudes static void do one group unsigned int amount,char buffer,char magni...
列印陀螺形數字
使用者輸入n,編寫程式通過二維陣列列印如下所示陀螺形數字 以n 6為例 1 20 19 18 17 16 2 21 32 31 30 15 3 22 33 36 29 14 4 23 34 35 28 13 5 24 25 26 27 12 6 7 8 9 10 11 列印陀螺形數字 通過控制二維陣...