這是最近在網上看到,好像是阿里演算法崗的乙個程式設計題,所以沒事做了一下,感覺非科班的做起來挺難頂的,花了不少時間,這裡寫了部落格記錄下,以防自己忘記。
菜鳥倉庫是乙個很大很神奇的地方,各種琳琅滿目的商品整整齊齊地擺放在一排排貨架上,通常一種品類(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,請返回從上到下的摺痕的陣列,若為下...