阿里算法工程师附加卷第二问

理解错题目含义,表示失败,后面想通了,没时间了,就在这里写一下后来修改过的答案。使用的是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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 刚才在cocoachina上面看到了一篇整理比较完整的文章,所以现在想转过来,当然我觉得还可以补充一些,以后有空再...
    青波志阅读 3,693评论 0 0
  • 定投就是按照自己规定的周期,投入到选择项目等额的金额;可以是一周、一月、一个季度。 这种方式看起来很简单,但简单背...
    sand_2f71阅读 1,832评论 0 2
  • 黄牛党对天朝来说,就是过年的时候了吧!而11区的这次联合众歌手和机构就采取了“绝对领域”模式——联合抵制黄牛党! ...
    缘叶二次元阅读 1,256评论 0 0
  • 继上一本《追风筝的人》后又买了这本据说可与之媲美的《摆渡人》。虽然风格不一样,但也带来同样的震撼。因为人物简单,心...
    民大铁老师阅读 1,787评论 1 3
  • 穷人变成富人真的很难很难,没办法,只能继续努力下去,每天不断进取,学一点知识和技能,多赚点钱! 首先,我们要敢想敢...
    永不放弃哥阅读 1,364评论 0 0

友情链接更多精彩内容