螺旋数字的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")

  

时间: 2024-10-12 13:15:34

螺旋数字的python实现的相关文章

将字符串转化为数字的python实现

将字符串转化为数字的python实现 将字符串转化为数字的python实现,例如将字符串"1234567.8"转化为 1234567.8 这也是学习python中的一个简单的练习题,代码如下: # coding=UTF-8 将字符串转化为数字 from functools import reduce import math def char2int(s): return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9'

用算盘图形表示数字,Python实现

1 ######################################################################### 2 # 10-row School abacus 3 # by 4 # Michael H 5 ######################################################################### 6 # Description partially extracted from from wikipe

螺旋数字程序

#include <stdio.h> int main(int argc, const char * argv[]) {              int num,maxnum,count=1,x=0,y,numtemp;         int i;         printf("输入螺旋列数num,和最大数字maxnum\n");         scanf("%d%d",&num,&maxnum);         int ind

05 数字 - 《Python 核心编程》

?? 数的简介 ?? 整型 ?? 布尔型 ?? 标准的整型 ?? 长整型 ?? 浮点型实数 ?? 复数 ?? 操作符 ?? 内建函数 ?? 其它数字类型 ?? 相关模块 5.1 数字类型 数字提供了标量贮存和直接访问. 它是不可更改类型,也就是说变更数字的值会生成新的对象. Python 支持多种数字类型:整型.长整型.布尔型.双精度浮点型.十进制浮点型和复数. 如何创建数值对象并用其赋值 (数字对象) : 创建数值对象和给变量赋值一样同样简单 anInt = 1 aLong = -999999

猜数字游戏-python

题目: 用python写一个猜数字的游戏,游戏规则如下: 1.由一个人随机写一个整数1-99(如:21) 2.一群小伙伴轮流猜数字,如第一个人猜一个数(如:48),则缩小范围至(1-48) 3.如第二个人猜一个数(如:9),则缩小范围为(9-48) 4.以此类推,直到猜中数字(21),游戏结束 分析: 1.使用random模块随机生成随机数 2.若输入值大于num1,小于随机数,则num1=输入值 3.若输入值小于num2大于随机数,则num2=输入值 题解: #coding:utf-8impo

腾讯2017年暑期实习生编程题【有趣的数字】Python

有趣的数字 时间限制:1秒 空间限制:32768K 题目描述: 小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢? 输入描述: 输入包含多组测试数据. 对于每组测试数据: N - 本组测试数据有n个数 a1,a2...an - 需要计算的数据 保证: 1<=N<=100000,0<=ai<=INT_MAX. 输出描述: 对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数. 输入示例: 6 45 12 45 32 5

PAT 数字分类 Python版

给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A1 = 能被 5 整除的数字中所有偶数的和: A2?? = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1-n2+n3-n4...: A3?? = 被 5 除后余 2 的数字的个数: A4?? = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位: A5 = 被 5 除后余 4 的数字中最大数字. 输入格式: 每个输入包含 1 个测试用例.每个测试用例先给出一个不超过 1000 的正整数 N,随后给

Leetcode 268.缺失数字 By Python

给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数. 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [9,6,4,2,3,5,7,0,1] 输出: 8 说明: 你的算法应具有线性时间复杂度.你能否仅使用额外常数空间来实现? 思路 因为给定的序列也是从0开始,所以可以进行排序,比较索引和索引对应的值,如果两个不等于说明就确实一个值了,还要注意一个情况是,没出现的数字是n 代码 class Solution(obje

leetcode 374. 猜数字大小(python)

我们正在玩一个猜数字游戏. 游戏规则如下:我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字.每次你猜错了,我会告诉你这个数字是大了还是小了.你调用一个预先定义好的接口 guess(int num),它会返回 3 个可能的结果(-1,1 或 0): -1 : 我的数字比较小 1 : 我的数字比较大 0 : 恭喜!你猜对了!示例 : 输入: n = 10, pick = 6输出: 6 class Solution(object): def guessNumber(self, n): "&q