理解错题目含义,表示失败,后面想通了,没时间了,就在这里写一下后来修改过的答案。使用的是python3.0.
核心思想是认为每一层是存储是分层的,比如第一层是1,第二层是1 2,第三层是1 2 3,
目标一是计算每一层能容纳多少物品。
依次相加可以知道要找的物品放在那一层。之后计算应该放在哪一个位置。
import math
#层数长度说明了之前的整数位是满的,公式为9*(10^n)*n的相加以及当前行的相加。
def layerCount(layerNumber):
lens = len(str(layerNumber))
count = 0
for temp in range(1,lens):
count += temp * 9*math.pow(10,temp - 1)
count += lens * (layerNumber - math.pow(10,lens - 1) + 1)
return int(count)
max = int(input())
count = 0 #所有层能容纳的总量
layerNumber = 0 #最后一层能容纳的量
layerContain = [] #每一层能容纳的量
finalLayer = 0#最有一层是那一层
while count < max:
layerNumber += 1
finalLayer = layerCount(layerNumber)
layerContain.append(finalLayer)
count += finalLayer
surplus = max - count + finalLayer #需要在最后一层放置几个物品
result = 0
for layerid in range(len(layerContain)):
if surplus <= layerContain[layerid]: #应该在那个数字放置物品
result = str(layerid + 1)[surplus - layerContain[layerid - 1] -1]#应该放置在那个数字的第几位
break
print(result)
网友评论