首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

HDU 1008 Elevator:電梯運行時間模擬

     編輯:C++ 入門

問題描述

最高樓只有一部電梯。給定 N 個停靠樓層請求(按順序),電梯從 0 樓開始。上樓每層 6 秒,下樓每層 4 秒,每次停靠停留 5 秒。求總耗時。電梯執行完請求後無需歸零。

輸入/輸出

  • 多測試案例,每案例:N 及 N 個正整數樓層(< 100)
  • 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 ✓

算法:直接模擬

  1. 維護 current = 0,total = 0。
  2. 遍歷請求序列 target:
    • diff = target - current
    • 若 diff ≥ 0:total += diff * 6 + 5
    • 否則:total += (-diff) * 4 + 5
    • current = target
  3. 輸出 total。

程式碼實現(C)

/* 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 是入門級模擬題,核心是仔細讀題、處理上下樓不同速度、同樓層停靠邏輯。代碼極簡,體現「模擬題重在邏輯清晰」的原則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved