python 200次螺旋_螺旋数字的python实现

标签:

螺旋数字的算法简单实现。

示例 5

01 02 03 04 05

16 17 18 19 06

15 24 25 20 07

14 23 22 21 08

13 12 11 10 09

通过观察,外部数字进行环绕一圈后向内收拢。

从程序出发,只要递归处理好4条边即可。

同时为了避免顶点重复赋值,最后一个点让后续的边处理。

说明:处理暂时存储在一个list对象中。

实现代码:

def getlocIndex(l_x,l_y,steps):

return l_x + l_y*steps

def increaseSeedAndSteps(curSeed,cur_steps):

return (curSeed +1,cur_steps+1)

def setTargetItem(targetlst,l_cur_x,l_cur_y,steps,curSeed):

loc_index = getlocIndex(l_cur_x, l_cur_y, steps)

targetlst[loc_index] = curSeed

def calc(targetlst,seed,l_x,l_y,nextsteps,steps):

current_seed = seed

loop_steps = nextsteps-1

if( nextsteps < 1 ):

setTargetItem(targetlst, l_x, l_y,steps, current_seed)

return

each_steps = 0

while(each_steps <= loop_steps):

setTargetItem(targetlst, l_x+each_steps, l_y,steps, current_seed)

current_seed,each_steps = increaseSeedAndSteps(current_seed ,each_steps)

each_steps = 0

while(each_steps <= loop_steps):

setTargetItem(targetlst, l_x+nextsteps, (l_y+each_steps), steps, current_seed)

current_seed,each_steps = increaseSeedAndSteps(current_seed ,each_steps)

each_steps = 0

while(each_steps <= loop_steps):

setTargetItem(targetlst, l_x+nextsteps-each_steps, l_y+nextsteps, steps, current_seed)

current_seed,each_steps = increaseSeedAndSteps(current_seed ,each_steps)

each_steps = 0

while(each_steps <= loop_steps):

setTargetItem(targetlst, l_x, l_y+nextsteps-each_steps, steps, current_seed)

current_seed,each_steps = increaseSeedAndSteps(current_seed ,each_steps)

if(nextsteps-2 >= 0):

calc(targetlst,current_seed,l_x+1,l_y+1,nextsteps-2,steps)

测试代码:

def outputResult(targetlst,steps):

outBuffer = ‘‘

for rowIndex in range(0, steps* steps):

if(rowIndex % steps == 0 and len(outBuffer) >0):

print(‘%s\n‘ % (outBuffer))

outBuffer = ‘‘

outBuffer = outBuffer + ‘%02d ‘ %(targetlst[rowIndex])

print(‘%s\n‘ % (outBuffer))

import traceback

try:

steps =5

targetlst = list()

[ targetlst.append(0) for nTry in range(0,steps* steps)]

calc(targetlst, 1,0,0,steps-1,steps)

outputResult(targetlst, steps)

except Exception as exc:

print("app catch: %s\n" % ( exc));

info = traceback.format_exc()

print(info)

print("done")

标签:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值