为了账号安全,请及时绑定邮箱和手机立即绑定
关注
慕仔4072574

求解,是要用到Python数组吗?

1.有如下数字:

05 04 03
06 01 02
07 08 09

像这样扩展到最多包含前25个数字:

17 16 15 14 13
18 05 04 03 12
19 06 01 02 11
20 07 08 09 10
21 22 23 24 25

您可能会很容易注意到,第一层(也是最内层01)仅包含一个数字(),第二层-紧邻其周围-包含8个数字(02-09范围内的数字),依此类推。

您的任务是创建一个给定数字的layers(n)函数,该函数返回n在第几层

例子:


2019-11-11 源自:python进阶 2-8 72 浏览 1 回答

最佳回答

2019-11-13

import math

def layers(n):

  n_sqrt = math.ceil(math.sqrt(n))

  if (n_sqrt % 2 == 0):

    n_sqrt = n_sqrt + 1

  layer = (n_sqrt + 1) / 2

  return layer


print layers(88)


慕仔4072574 (提问者)

规律是怎么找到的,我思路不行

#1 2019-11-13 回复

悠哉悠哉3311454 回复 慕仔4072574

最里面的最大数是1的平方,第二圈是3的平方,第三圈是5的平方。已知一个数字n,那么他的平方根必然大于里面一层最大数的平方根,小于等于当前层的平方根,对其使用math.ceil方法返回一个偶数或者一个奇数,如果是偶数那么+1,如果是奇数那么这个奇数就是当前层最大数的平方根。知道了当前最大数的平方根,那么(n_sqrt + 1) / 2就是n在第几层。其实代码更好理解。。。

#2 2019-11-15 回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信