大楼有地下-1层~地面33层,此大楼有A、B、C三部电梯。调度原则:(1)电梯按照用户按键的时间顺序前往服务;(2)距离按键用户所在楼层最近的电梯前往(若楼层距离一样,则按A、B、C的优先调度顺序前往用户楼层);(3)电梯一旦启动前往某楼层,不再为其它楼层用户服务。
输入格式:
第一行输入:A、B、C三部电梯当前静止停留的楼层
第二行输入:按键用户数量
第三行输入:依次按键并等待电梯的用户所在的楼层
输出格式:
依照用户按键次序,各行依次输出电梯前往楼层的情况(见样例1)
若按键用户超过3人,则输出用户等待(见样例2)
若第一行输入的某楼层不在[-1,33]范围内,则输出“Input error!”,程序结束(见样例3)
若第三行输入的某楼层不在[-1,33]范围内,则输出“Input error!”后程序结束,此无效楼层之前的调度不受影响(见样例4)
输入样例1:
7 8 15
2
9 3
输出样例1:
B goes to 9 floor
A goes to 3 floor
输入样例2:
7 3 18
4
11 33 22 5
输出样例2:
A goes to 11 floor
C goes to 33 floor
B goes to 22 floor
user on 5 floor waits
输入样例3:
6 35 7
输出样例3:
Input error!
输入样例4:
17 18 19
3
10 -2 20
输出样例4:
A goes to 10 floor
Input error!
以下是我的代码
#include "stdio.h"
#include "math.h"
int main()
{
// 输入 A、B、C 三个楼层的初始值
int A, B, C, n, i, u;
scanf("%d%d%d", &A, &B, &C);
// 检查输入是否在合法范围内
if (A < -1 || A > 33 || B < -1 || B > 33 || C < -1 || C > 33)
{
printf("Input error!");
return 0;
}
// 输入要执行的操作的次数
scanf("%d", &n);
// 循环执行每个操作
for (i = 0; i < n; i++)
{
// 输入当前用户所在的楼层
scanf("%d", &u);
// 检查输入是否在合法范围内
if (u < -1 || u > 33)
{
printf("Input error!");
return 0;
}
// 根据条件确定每个电梯的行动
if ((A != 99 && abs(A - u) <= abs(B - u)) && abs(A - u) <= abs(C - u))
{
printf("A goes to %d floor\n", u);
A = 99;
}
else if (B != 99 && abs(B - u) <= abs(A - u) && abs(B - u) <= abs(C - u))
{
printf("B goes to %d floor\n", u);
B = 99;
}
else if (C != 99 && abs(C - u) <= abs(A - u) && abs(C - u) <= abs(B - u))
{
printf("C goes to %d floor\n", u);
C = 99;
}
else
printf("User on %d floor waits\n", u);
}
return 0;
}