PAT 1008 Elevator (20分) 状态迭代更新+加减法

Scroll Down

题目

The highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator will stop, in specified order. It costs 6 seconds to move the elevator up one floor, and 4 seconds to move down one floor. The elevator will stay for 5 seconds at each stop.

For a given request list, you are to compute the total time spent to fulfill the requests on the list. The elevator is on the 0th floor at the beginning and does not have to return to the ground floor when the requests are fulfilled.

Input Specification:
Each input file contains one test case. Each case contains a positive integer N, followed by N positive numbers. All the numbers in the input are less than 100.

Output Specification:
For each test case, print the total time on a single line.

Sample Input:
3 2 3 1
Sample Output:
41

题目解读

模拟坐电梯,假设你初始在第0层,给出一个正整数序列模拟电梯将要逐个停靠的楼层,上一层楼花费6s,下一层楼花费4s,电梯在每一层都要停靠5s,问你,走完给出的所有楼层,一共需要花费多少时间?

这道题真的很简单,你只需要考虑你当前位置和下一个要去的楼层就可以了,+6+4,然后都要+5到达下一个楼层后,这个楼层就变为你所处的”当前位置“,然后继续判断下一个楼层是上还是下.......重复这个过程,直到走完所有楼层。

注意题目说了,电梯最终不需要回到0层,所以不要自作聪明哦!

代码

只需要注意更新”当前所处位置“就可以了。

#include <iostream>
using namespace std;

int main() {

    int n;
    cin >> n;
    // 刚开始在第0层
    int now = 0, next;
    int time = 0;
    for (int i = 0; i < n; ++i) {
        cin >> next;
        // 向上一层6s
        if (next > now) 
            time += (next - now) * 6;
        // 向下一层4s
        else if (next < now)
            time += (now - next) * 4;
        // 到达后停留5s
        time += 5;
        // 移动当前位置
        now = next;
    }
    cout << time;
    return 0;
}