搜狐集團2018秋季校招筆試題 包裹問題

2021-08-07 15:44:45 字數 3409 閱讀 5816

解題思路:

1、寬度為6、5、4、3的產品都需單獨用乙個6*6的盒子裝

乙個6*6的盒子可以裝四個寬度為3的產品,width3//4表示寬度為3的產品數除以4取整數

boxnum=width6+width5+width4+(1+width3//4)

2、乙個寬度為6的產品需單獨裝乙個盒子

乙個寬度為5的產品需要和11個寬度為1的產品能裝入乙個盒子

乙個寬度為4的產品需要和5個寬度為2的產品裝入乙個包裹盒子

乙個6*6的盒子可以裝四個寬度為3的產品

計算裝完寬度為5的產品、寬度為4的產品、寬度為3的產品後寬度為1的產品、寬度為2的產品、寬度為3的產品還有好多剩餘

3、leftwidth1=width1-width5*11

leftwidth2=width2-width4*5

leftwidth3=width3%4

可能出現的場景:

(1)leftwidth2為負數,說明寬度為2的產品數不夠填充寬度為4的空餘處,需要寬度為1的產品繼續填充多餘的空格

leftwidth1=width1-width5*11+width2-width4*5

(2)leftwidth2為正數,leftwidth1沒有剩餘,leftwidth3有剩餘,此時要考慮乙個寬度為3的產品最多只能與5個寬度為2的裝入乙個盒子

(3)寬度為1、2、3的產品都剩餘,此時要考慮乙個寬度為3的產品最多只能與5個寬度為2的裝入乙個盒子,空餘位置由寬度為1的產品填充

找規律:寬度為3的產品還剩1個,最多可裝5個寬度為2的產品

寬度為3的產品還剩2個,最多可裝3個寬度為2的產品

寬度為3的產品還剩3個,最多可裝1個寬度為2的產品

即寬度為3的產品剩餘width3(小於4),最多可裝(7-2*width3)個寬度為2的產品

#code:utf-8

import sys

if __name__=="__main__":

mylist=

while(true):

inputval=raw_input()

if(list(map(int,inputval.split()))==[0,0,0,0,0,0]):

break

lens=len(mylist)

width1,width2,width3=0,0,0

for i in xrange(lens):

boxnum=0

#加上產品寬度為6,5,4的個數,以及產品寬度為3的個數mylist[i][2]//4 (乙個包裹可以裝4個寬度為3的產品)

boxnum=(boxnum+mylist[i][5]+mylist[i][4]+mylist[i][3]+mylist[i][2]//4)

#判斷產品寬度為3的產品,拼成多個乙個盒子過後,還剩餘多少個寬度為3的產品 mylist[i][2]%4

width3=mylist[i][2]%4

width2=mylist[i][1]-mylist[i][3]*5

#判斷產品寬度為2的盒子,放在寬度為4的產品後還剩餘多少個寬度為2的產品

width1=mylist[i][0]-mylist[i][4]*11

#判斷產品寬度為1的盒子,放在寬度為5的產品後還剩餘多少個寬度為1的產品

#print(u"第一趟裝完寬度3、4、5、6後剩餘的產品 width3:%d width2:%d width1:%d" %(width3,width2,width1))

if(width3>0): #寬度為3的產品有剩餘

if (0

and(width2<=(7-2

*width3)): #產品寬度為2的個數能填滿寬度為3剩餘最大個數為7-2*width3,還有空餘由寬度為1的填充

width1=width1-(36-width2*4-width3*9)

#print(u"第二趟寬度為2的正好滿足寬度為3的產品 width3:%d width2:%d width1:%d" %(width3,width2,width1))

if(width1>0):

boxnum=boxnum+1+1+(width1-(36-width2*4-width3*9))//36

else:

boxnum=boxnum+1

elif(width2>(7-2

*width3)): #產品寬度為2的個數大於寬度為3所需的最大個數

width2useforwidth3=7-2

*width3

width2=width2-width2useforwidth3

width1=width1-(36-width2useforwidth3*4-width3*9)

#print(u"產品寬度為2的個數大於寬度為3所需的最大個數 width3:%d width2:%d width1:%d" %(width3,width2,width1))

if(width1<=0): #寬度為3、2的產品有剩餘

boxnum=boxnum+1+1+(width2*4)//36

elif(width1>0):

boxnum=boxnum+1+1+(width1*1+width2*4)//36

elif(width2<0): #寬度為3、1的產品有剩餘

if(width1>0): #寬度為1的產品還有剩餘

width1=mylist[i][0]-mylist[i][4]*11+(mylist[i][1]-mylist[i][3]*5)

if(width1<0): #只有寬度為3的產品有剩餘

boxnum=boxnum+1

else: #只有寬度為1、3的產品有剩餘

if((36-width3*9-width1)<0):

boxnum=boxnum+1+1+(width1*1-36+width3*9)//36

else:

boxnum=boxnum+1

else: #寬度為3的產品沒有剩餘

if(width1<0) and(width2>0): #只有寬度為2的產品有剩餘

boxnum=boxnum+1+width2//9

elif(width1>0) and(width2<0): #只有寬度為1的產品有剩餘

boxnum=boxnum+1+width1//36

elif(width1>0) and(width2>0): #只有寬度為1、2的產品有剩餘

boxnum=boxnum+1+(width2*4+width1*1)//36

print str(boxnum)

廣聯達2018校招筆試題

廣聯達現場筆試,有一種難受叫做,沒時間了,也沒紙了,但是卻發現了程式的錯誤。第一題 輸入乙個n,輸出1 2 3 4 5 6 7.n的值。int fun int num return sum void main void main int num cin num int len sizeof ar s...

觸寶科技2018校招筆試題

大概的思路就是 預設這個距離 最大兩點的距離 函式是時間變數的乙個凸函式 我猜的,具體證明不會 凸函式找最大值,用三分法就可以了。然後就三分時間則可以求得答案 include include include include using namespace std const int mx 308 c...

百詞斬2018校招筆試題

一 要求實現三個功能,呼叫 edit 進行資料錄入,呼叫 rollback 進行撤銷,必須錄入之後方可撤銷,否則輸出e,呼叫 restore 進行撤銷恢復 同時,必須在撤銷之後才可以進行恢復。輸入第一行為一共的操作次數,接下來的n行,每行代表乙個命令,輸出為n行,為每一步操作之後的顯示結果。輸入 7...