亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我來說一個面試題吧,2012年參與到的Facebook Programming puzzle

我來說一個面試題吧,2012年參與到的Facebook Programming puzzle

躍然一笑 2019-04-06 16:57:38
這題是當時自己去投Facebook的時候,programmingpuzzle那關給的題目。題目如下:你有足夠數量的天秤和砝碼。每個天秤有10磅。天秤的左右兩邊可以放砝碼,也可以放天秤。題目要求是,在給定的初始組合情況下,如何添加砝碼,讓整體保證平衡。輸入是一串數字,第一行是一個整數,代表當前初始狀態一共有多少個天秤,每個天秤都有一個序號接下來往下,每兩行分別代表一個天秤左右兩邊所包含的天秤序號和包含的砝碼重量每一組的格式如下:左半的砝碼重量右半的砝碼重量其中,表示數組輸入樣例如下:4//4個天秤01//0號天秤左邊放置著1號天秤02//0號天秤右邊放置著2號天秤0//1號天秤左邊啥都沒有03//1號天秤右邊放置著3號天秤3//2號天秤左邊有三磅重的砝碼0//2號天秤右邊啥都沒有0//3號天秤左邊啥都沒有0//3號天秤右邊啥都沒有輸出,輸出N行。第i行代表第i個天秤的左右兩邊需要添加多少重量的砝碼輸出樣例如下:0:0141:1002:033:00大家可以試試看。Facebook當時給我的時間是1小時,當時做完這題就可以進入phoneinterview,可惜掛在了phoneinterview那--。我是分割線不用考慮力矩,單純的天秤左右配平。不會出現嵌套情況。還有就是,當時我在做這題的時候,input不一定是一棵樹,有可能是一個森林。測試用例我得找一找,不一定有存了。。一年前的題,我也換過了電腦。我準備周一把我的解答放上來。
查看完整描述

2 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

小花了一點時間理解題意,個人解法如下:假設天平之間沒有嵌套關系(即不會出現1在2左邊,2在1左邊這種情況)為了使一個天平平衡,首先得把放在其左邊或右邊的天平配平假設力矩為0,天平左右兩邊重量不等時在少的一邊用砝碼補上重量如果符合以上,題目綜合性不錯,涉及了簡單樹的遍歷以及貪心算法下面是代碼(腦袋不好使狀態,不知道弄對了沒——反正代碼風格成渣渣了)importsys
defset_balance(id):
ifnotbalanced[id]:
foriinlcld[id]:
lw[id]+=set_balance(i)
foriinrcld[id]:
rw[id]+=set_balance(i)
iflw[id]ladd[id]=rw[id]-lw[id]
lw[id]+=ladd[id]
eliflw[id]>rw[id]:
radd[id]=lw[id]-rw[id]
rw[id]+=radd[id]
balanced[id]=True
returnlw[id]+rw[id]
n=int(sys.stdin.readline())
lw=[5foriinrange(n)]
rw=[5foriinrange(n)]
lcld=[[]foriinrange(n)]
rcld=[[]foriinrange(n)]
foriinrange(n):
row=[int(v)forvinsys.stdin.readline().split()]
lw[i]+=row[0]
forvinrow[1:]:
lcld[i].append(v)
row=[int(v)forvinsys.stdin.readline().split()]
rw[i]+=row[0]
forvinrow[1:]:
rcld[i].append(v)
balanced=[Falseforiinrange(n)]
ladd=[0foriinrange(n)]
radd=[0foriinrange(n)]
foriinrange(n):
get_balance(i)
foriinxrange(n):
print"%d:%d%d"%(i,ladd[i],radd[i])
                            
查看完整回答
反對 回復 2019-04-06
  • 2 回答
  • 0 關注
  • 330 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號