PAT-ADVANCED1008——Elevator

本文详细解析了PAT-ADVANCED竞赛中的1008电梯问题,介绍了如何使用数组和双指针算法计算电梯完成一系列楼层请求所需的总时间。通过实例演示了算法的具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的PAT-ADVANCED代码仓:https://github.com/617076674/PAT-ADVANCED

原题链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805511923286016

题目描述:

题目翻译:

1008 电梯

我们城市最高的建筑只有一部电梯。 请求列表由N个正数组成。 数字表示电梯将以指定顺序停在哪些楼层。 将电梯向上移动一层需要6秒钟,向下移动一层楼需要4秒钟。 电梯将在每个站点停留5秒钟。

对于给定的请求列表,您将计算在列表上完成请求所花费的总时间。 电梯在开始时位于0楼,并且在满足要求时不必返回到底层。

输入格式:

每个输入文件包含一个测试用例。每个测试用例包含一个正整数N,紧跟着N个正数。输入中的所有数字都小于100。

输出格式:

对每个测试用例,在一行中输出总时间。

输入样例:

3 2 3 1

输出样例:

41

知识点:数组、双指针

思路:用两个变量pre和now分别记录前一时刻电梯所在的层数以及当前时刻电梯所在层数

注意:即使是最后一层,其停留的5s时间也需要计算在内。

时间复杂度是O(N)。空间复杂度是O(1)。

C++代码:

#include<iostream>

using namespace std;

int main(){
	int N;
	scanf("%d", &N);
	int pre = 0;
	int now;
	int result = N * 5;
	for(int i = 0; i < N; i++){
		scanf("%d", &now);
		if(now > pre){
			result += (now - pre) * 6;
		}else if(now < pre){
			result += (pre - now) * 4;
		}
		pre = now;
	}
	printf("%d\n", result);
	return 0;
}

C++解题报告:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值