最高樓只有一部電梯。給定 N 個停靠樓層請求(按順序),電梯從 0 樓開始。上樓每層 6 秒,下樓每層 4 秒,每次停靠停留 5 秒。求總耗時。電梯執行完請求後無需歸零。
N = 0 結束輸入輸入:
1 2
3 2 3 1
0
輸出:
17
41
解析:
案例 1:0→2 上 2 層 = 12s + 停 5s = 17s
案例 2:0→2(12+5) →3(6+5) →1(下2層 8+5) →3(上2層 12+5) = 17+11+13+17=58? 實際樣例 41,需重算。
正確:0→2(12+5=17) →3(6+5=11) →1(4*2+5=13) →3(6*2+5=17) 總 17+11+13+17=58? 樣例輸出 41,說明輸入格式為:1 2 代表第一案例 N=1 樓層=2;3 2 3 1 代表第二案例 N=3 樓層 2,3,1。
第一案例:0→2 = 12+5=17 ✓
第二案例:0→2(12+5=17) →3(6+5=11) →1(下2層 8+5=13) 總 17+11+13=41 ✓
current = 0,total = 0。target:
diff = target - currentdiff ≥ 0:total += diff * 6 + 5total += (-diff) * 4 + 5current = targettotal。/* HDU 1008 Elevator */
#include <stdio.h>
int main() {
int n;
while (scanf("%d", &n) == 1) {
if (n == 0) break;
int prev = 0, total = 0;
for (int i = 0; i < n; ++i) {
int cur; scanf("%d", &cur);
if (cur >= prev) total += (cur - prev) * 6 + 5;
else total += (prev - cur) * 4 + 5;
prev = cur;
}
printf("%d\n", total);
}
return 0;
}
diff = 0,上樓分支執行,0*6+5 = 5 秒,符合「停留 5 秒」。N=0 終止,不處理該案例。HDU 1008 是入門級模擬題,核心是仔細讀題、處理上下樓不同速度、同樓層停靠邏輯。代碼極簡,體現「模擬題重在邏輯清晰」的原則。