PAT_1008: Elevator

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


#include<stdio.h>
#define UP_TIME 6
#define DOWN_TIME 4
#define STAY_TIME 5
int main()
{
	int num_floor,i,total_time=0,current_floor=0,diff;
	int floor[1000];


	scanf("%d",&num_floor);

	for(i=0;i<num_floor;i++)
		scanf("%d",&floor[i]);

	for(i=0;i<num_floor;i++)
	{
		diff = floor[i]-current_floor;
		if(diff>0)
			total_time+=diff*UP_TIME;
		else if(diff<0)
			total_time+=diff*DOWN_TIME*(-1);
		current_floor = floor[i];
	}
	total_time += num_floor*STAY_TIME;

	printf("%d",total_time);
	return 0;
}


ELEVATOR_INSERT_SORT是一种电梯排序算法。这个算法可以使电梯的总运行时间最短,并且在电梯内乘客的等待时间最小。其具体实现步骤如下: 1. 当电梯停靠在某一层时,乘客会按电梯内按钮或楼层外的按钮。 2. 按下电梯内按钮的乘客会在电梯内等待,按下楼层外按钮的乘客会在该楼层等待电梯。 3. 电梯内有一个目标队列,存储所有电梯要停靠的楼层,这些楼层按顺序排列。 4. 当电梯内没有乘客时,电梯会朝着目标队列中第一个元素的方向运动。 5. 当电梯内有乘客时,电梯会朝着目标队列中所有需要停靠的楼层的方向运动,并且在每个需要停靠的楼层停靠一次。 6. 当电梯到达某一层时,会寻找该层的所有乘客并将他们加入目标队列,并且将目标队列中该层的所有楼层都删除。 7. 当电梯内没有乘客,也没有任何等待的乘客时,电梯会停在最近的楼层。 下面是电梯排序算法的Python实现代码: ```python class Elevator: def __init__(self): self.current_floor = 0 self.target_floors = [] self.direction = 1 def add_target_floor(self, floor): if floor not in self.target_floors: self.target_floors.append(floor) def remove_target_floor(self, floor): if floor in self.target_floors: self.target_floors.remove(floor) def move(self): self.current_floor += self.direction if self.current_floor in self.target_floors: self.remove_target_floor(self.current_floor) if len(self.target_floors) == 0: self.direction = 0 elif self.direction == 1: self.check_up() else: self.check_down() def check_up(self): floors_to_remove = [] for floor in self.target_floors: if floor > self.current_floor: floors_to_remove.append(floor) for floor in floors_to_remove: self.remove_target_floor(floor) if len(self.target_floors) == 0: self.direction = 0 else: self.direction = 1 if self.target_floors[-1] > self.current_floor else -1 def check_down(self): floors_to_remove = [] for floor in self.target_floors: if floor < self.current_floor: floors_to_remove.append(floor) for floor in floors_to_remove: self.remove_target_floor(floor) if len(self.target_floors) == 0: self.direction = 0 else: self.direction = -1 if self.target_floors < self.current_floor else 1 elevator = Elevator() elevator.add_target_floor(2) elevator.add_target_floor(4) elevator.add_target_floor(1) elevator.add_target_floor(3) while elevator.direction != 0: elevator.move() print("Elevator is on floor", elevator.current_floor) print("Elevator has stopped") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值