这是一个比较复杂的问题,问AI回答肯定是不行的.情况比较多我也未必一定会写的都对,不过case是过了,你先试试能不能过把
#include <iostream>
#include <vector>
#include <cmath>
struct Passenger {
int time;
int start_floor;
int target_floor;
int direction = 0;// 乘坐电梯方向
int status; //0:未上电梯,1:在电梯上,2:已坐完电梯
};
void elevatorSimulation(int max_floor, Passenger passengers[],int passenger_count) {
int current_floor = 1; // 初始电梯位置在一层
int total_time = 0; // 总时间
int direction = 1; // 电梯初始向上运行
int target_floor = 1; // 当前运行状态下的目标楼层
int passenger_endcount = 0; //完成乘坐的电梯
while(true){
bool stop = false;
for(int i =0;i<passenger_count;i++){
if(passengers[i].status == 0){
if(passengers[i].direction == direction && passengers[i].time <= total_time ){
// 电梯接人状态
if(direction >0 && passengers[i].target_floor > target_floor){
target_floor = passengers[i].target_floor;
}else if(direction <0 && passengers[i].target_floor < target_floor){
target_floor = passengers[i].target_floor;
}
if(passengers[i].start_floor == current_floor){
stop = true;
passengers[i].status++;
}
}
}
if(passengers[i].status == 1){
if(passengers[i].target_floor == current_floor){
stop = true;
passengers[i].status++;
passenger_endcount++;
}
}
}
if(passenger_endcount == passenger_count)break;
if(stop){
total_time += 3;
}
current_floor+=direction;
if(current_floor == target_floor){
direction = -direction;
for(int i =0;i<passenger_count;i++){
if(passengers[i].status == 0){
if(direction <0 && passengers[i].start_floor < target_floor){
target_floor = passengers[i].start_floor;
}else if(direction >0 && passengers[i].start_floor > target_floor){
target_floor = passengers[i].start_floor;
}
}
}
}
total_time+= 2;
}
// 输出结果
std::cout << total_time << " " << current_floor << std::endl;
}
int main() {
int max_floor, passenger_count;
Passenger passengers[1001];
while(std::cin >> max_floor){
std::cin>>passenger_count;
for (int i = 0; i < passenger_count; ++i) {
std::cin >> passengers[i].time >> passengers[i].start_floor >> passengers[i].target_floor;
passengers[i].status = 0;
passengers[i].direction = passengers[i].target_floor > passengers[i].start_floor ? 1: -1;
}
// 调用电梯模拟函数,计算总时间
elevatorSimulation(max_floor, passengers,passenger_count);
}
return 0;
}
/*
4
2
0 2 4
1 1 4
*/