话说坚持日更真的好难啊~特别是这段时间其实没什么事干,懒习惯了。。。唉!
- 题目描述
在某一高层建筑内只有一部电梯,当你按下一个数时,电梯会运行到那一层。已知电梯每上升一层需6秒,下降一层需4秒,在需要停留的那层停留5秒。现有N个整数组成的一个需求列表,电梯将依次响应,电梯从0层开始运行,而在运行过程结束之前不会返回0层。
注意,若出现相邻两个整数相等,代表在同一层执行了两个不同任务,可以理解为:电梯已经停了5秒,正要关门时又有人在同一层按开门键,电梯又开门并停留5秒。 - 输入
输入分两行,第一行是一个正整数N(N<=1000),代表停留几次,第二行的N个数字代表这几次依次停留的楼层。 - 输出
输出电梯完成该任务序列所需的时间,单独占一行。 - 参考代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a=0,k,N,s=0;
scanf("%d",&N);
for(int i=1;i<=N;i++){
scanf("%d",&k);
if(k>=a){
s+=(k-a)*6;// 判断上升,计算上升的楼层数,把楼层数*6得到所花时间
}
else if(k<a){
s+=(a-k)*4;//判断下降,计算下降的楼层数,把楼层数*4得到所花时间
}
s+=5;//每次到达后等待5s
a=k;//把下一次运行前更新为运行后的楼层的楼层
}
printf("%d",s);
return 0;
}
- 代码解析:
题目的代码要求难点在于, - 每上升一层需6秒,下降一层需4秒。我们需要判断每次行动是上升还是下降。
- 这里我们每次循环,都把上一次运行后的楼层更新到这一次中,和接下来的楼层做对比就可以知道是上升还是下降,判断后把时间算进总时间即可。
- 记得每次判断完,也就是到达相应的楼层后要加上等待的5秒。
其他要点可以看注释。
网友评论