菜鳥倉庫 貨物格仔問題程式設計題

2021-10-22 04:19:58 字數 1913 閱讀 5688

這是最近在網上看到,好像是阿里演算法崗的乙個程式設計題,所以沒事做了一下,感覺非科班的做起來挺難頂的,花了不少時間,這裡寫了部落格記錄下,以防自己忘記

菜鳥倉庫是乙個很大很神奇的地方,各種琳琅滿目的商品整整齊齊地擺放在一排排貨架上,通常一種品類(sku)的商品會放置在貨架的某乙個格仔中,格仔設有統一的編號,方便工人們揀選。有一天沐哲去菜鳥倉庫參觀,無意中發現第1個貨架格仔編碼為1,第2-3個分別為1,2,第4-6個格仔分別是1,2,3,第7-10個格仔編號分別是1,2,3,4,每個格仔編號都是0-9中的乙個整數,且相鄰格仔的編號連在一起有如下規律1|12|123|1234|…|123456789101112131415|…|123456789101112131415……n 這個倉庫存放的商品品類非常豐富,共有1千萬多個貨架格仔。沐哲很好奇,他想快速知道第k個格仔編號是多少?

下面展示一些內聯**片

def find_row(n):

input = n

index = 1

val = 0

front_sum = 0

while input > val:

val_last = val

val += front_sum + len(str(index))*(index-10**(len(str(index))-1)+1)

if index%9 == 0:

front_sum += len(str(index))*9*10**(len(str(index))-1)

#print("front_sum = ",front_sum)

#print("val = ",val)

#print("val_last",val_last)

index += 1

index_cols = val-val_last

return index-1,index_cols,val_last

def find_num(col):

digit = 1

digit_sum = 9

while col > digit*digit_sum:

col -= digit*digit_sum

digit += 1

digit_sum *= 10

print("digit = ", digit)

print("col==", col)

index = 1

if digit >1:

while(col>digit):

col -= digit*index

index += 1

num = 10**(digit-1)+index-1

return str(num)[col-1]

return col

if __name__ == '__main__':

box = 46

#row:格仔所在行號

#now_cols:該行總列數

#val_last:該行之前的所有格仔總數

row, now_cols,val_last = find_row(box)

print("row: ",row)

print("now_cols: ",now_cols)

print("val_last: ",val_last)

cols = box-val_last

print("cols = ",cols)

print(find_num(cols))

第乙個函式find_row其實就是為了算出這個格仔在第幾行第幾列,規律就是上圖,每一次公升位(從1位數變兩位數)就把前一位數所有的格仔存入front_sum。

阿里巴巴演算法崗程式設計題 菜鳥倉庫

菜鳥倉庫是乙個很大很神奇的地方,各種琳琅滿目的商品整整齊齊地擺放在一排排貨架上,通常一種品類的商品會放置在貨架的某乙個格仔中,格仔設有統一的編號,方便工人們挑選。有一天沐哲取菜鳥倉庫參觀,無意中發現第1個貨架格仔編碼為1,第2 3個分別為1,2,第4 6個格仔分別是1,2,3,第7 10個格仔編號分...

格仔遊戲 資料結構程式設計題

題目描述 有n個格仔,從左到右放成一排,編號為1 n。共有m次操作,有3種操作型別 1.修改乙個格仔的權值,2.求連續一段格仔權值和,3.求連續一段格仔的最大值。對於每個2 3操作輸出你所求出的結果。輸入 輸入第一行兩個整數,n表示格仔個數,m表示操作次數,n和m中間用空格隔開 接下來輸入n行,每行...

程式設計題 摺紙問題

請把紙條豎著放在桌 上,然後從紙條的下邊向上 對折,壓出摺痕後再展 開。此時有1條摺痕,突起的 向指向紙條的背 這條摺痕叫做 下 摺痕 突起的 向指向紙條正 的摺痕叫做 上 摺痕。如果每次都從下邊向上 對折,對折n次。請從上到下計算出所有摺痕的 向。給定折的次數n,請返回從上到下的摺痕的陣列,若為下...