題目:有一棟樓,現在設計一種電梯排程演算法:電梯在一樓讓大家上電梯,然後根據大家選擇要到的樓層算出某一樓層i,電梯在i層停下讓所有人下電梯,然後大家爬樓梯達到自己的樓層。請問電梯停在哪一層,可以使得這一次的所有乘客爬樓層之和最短?
(一)最直接最簡單的方法就是直接列舉從第一層到最後一層,然後算出電梯停在哪一層會使得所有乘客爬樓層之和最短。
**如下:
int nperson; //nperson[i]表示到第i層的乘客的數目
int nfloor = 0, nminfloor = 0;
int ntargetfloor = -1;
for(int i = 1; i <= n; ++i)
}
(二)
思路:當電梯停靠在第i層時,乘客所要爬的總的樓梯數為y.假設有n1個乘客要到達的層數
所以有:
(1)當電梯改停在i-1,則 y+(n2+n3-n1)
(2)當電梯改停在i+1,則 y+(n1+n2-n3)
所以當後面那部分的值<0時(如(2)的n1+n2因此,我們可以從第一層開始,用以上策略,考察n1,n2,n3的值,依次調整以得到最優解.
int nperson; //nperson[i]表示到第i層的乘客的數目
int nfloor = 0, nminfloor = 0;
int ntargetfloor = 1;
int n1 = 0, n2 = 0, n3 = 0;
for(n1 = 0, n2 = nperson[1], n3 = 0, i = 2; i <= n; ++i)
for(int i = 2; i <= n; ++i) else break;
}
1 8 小飛的電梯排程演算法
題目 有一棟樓,如今設計一種電梯排程演算法 電梯在一樓讓大家上電梯,然後依據大家選擇要到的樓層算出某一樓層i,電梯在i層停下讓全部人下電梯,然後大家爬樓梯達到自己的樓層。請問電梯停在哪一層。能夠使得這一次的全部乘客爬樓層之和最短?一 最直接最簡單的方法就是直接列舉從第一層到最後一層,然後算出電梯停在...
小飛的電梯排程演算法
程式設計之美 第1.8節 小飛的電梯排程演算法 假設樓層共有n層,電梯停在第x層,要去第i層的乘客數目總數為total i 所爬樓梯的總數就是sum,求使得這個和最小的x的值,即電梯停的樓層數。stop1函式是o n 2 的演算法,就是假設在每層樓停下,計算此時需要爬的樓梯數,如果比最小的少,則賦值...
小飛的電梯排程演算法
1 問題描述 某大廈一共有6部電梯,在高峰時間,每層都有人上下,電梯在每層都停,實習生小飛常常會被每層都停的電梯弄的很不耐煩,於是他提出了這樣乙個辦法 由於樓層不太高,每次電梯往上走時,我們只允許電梯停在其中的某一層。所有乘客都從一樓上電梯,到達某層後,電梯停下來,所有乘客再從這裡爬樓梯到自己的目的...