在高峰時間,實習生小飛常常會被電梯每層樓都停弄得很不耐煩,於是他想出了這樣乙個辦法:由於樓層並不高,那麼在繁忙的時間,每次電梯從一層往上走時,我們只允許電梯停在其中的某一層。所有乘客都從一樓上電梯,到達某層樓後,電梯聽下來,所有乘客再從這裡爬樓梯到自己的目的層。在一樓時,每個乘客選擇自己的目的層,電梯則自動計算出應停的樓層。
問:電梯停在哪一層樓,能夠保證這次乘坐電梯的所有乘客爬樓梯的層數之和最少?
#! /usr/bin/python
#coding=utf-8
import
random,math
from itertools import
groupby
floor = 5
defmain():
arr = [random.randint(1,floor) for i in range(random.randint(3,5))]
arr do1(arr)
do2(arr)
defdo1(arr):
print"-
" * 20data = [(i,sum([abs(item - i) for item in arr])) for i in range(1,floor+1)]
maxdata = min([item for index, item in
data])
for index, item in
data:
"%s,%s %s
" % (index,item,"*"
if item == maxdata else"")
defdo2(arr):
print"-
" * 20arr =sorted(arr)
nperson = [0] * (floor + 1)
for k,v in
groupby(arr):
nperson[k] =len(list(v))
#print nperson
floors = sum([x - 1 for x in arr if x > 1])
n1,n2,n3 = 0, nperson[1], sum(nperson) - nperson[1]
ntargetfloor = format_print(1,n1,n2,n3,floors,none)
for x in range(2,floor+1):
floors += n1 + n2 -n3
n1 +=n2
n2 =nperson[x]
n3 -=n2
ntargetfloor =format_print(x,n1,n2,n3,floors,ntargetfloor)
defformat_print(x,n1,n2,n3,floors, ntargetfloor):
x,n1,n2,n3,floors,
if n1+n2 >= n3 and (ntargetfloor == none or ntargetfloor ==floors):
print"*
"return
floors
return
ntargetfloor
if__name__ == '
__main__':
main()
電梯排程演算法( )
今天我們做的是乙個結對程式設計作業,其實對結對程式設計,我也有兩種看法,第一 提高自己,第二 埋沒自己。關鍵看是如何去利用結對程式設計,才能達到事半功倍的效果。這次我們做的是乙個關於電梯控制排程的程式,這個程式的演算法思想做了一天,初步有了電梯排程演算法的框架。由於電腦換了,拿到聯想服務站維修,只在...
電梯排程演算法 C
1.演算法解析 掃瞄演算法 scan 又稱電梯排程演算法,scan演算法是磁頭前進方向上的最短查詢時間優先演算法,它排除了磁頭在盤面區域性位置上的往復移動,scan演算法在很大程度上消除了sstf演算法的不公平性,但仍有利於對中間磁軌的請求。電梯排程演算法是從移動臂當前位置開始沿著臂的移動方向去選擇...
簡化電梯排程演算法
github 編寫程式的 行數 除錯的bug數 完成該次作業總耗時 245 265行 10 20個 12 15h elevator scheduling a策略 選取當前 向上 向下 停靠 三類行動中讓另外兩類行動的乘客等待時間最小的乙個 a.cpp b策略 估計三種行動的耗時,採用預估耗時最少的 ...