美文网首页
阿里算法工程师附加卷第二问

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

作者: 永远学习中 | 来源:发表于2017-08-25 21:57 被阅读0次

    理解错题目含义,表示失败,后面想通了,没时间了,就在这里写一下后来修改过的答案。使用的是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)
    

    相关文章

      网友评论

          本文标题:阿里算法工程师附加卷第二问

          本文链接:https://www.haomeiwen.com/subject/akmpdxtx.html