题目概述
一幢高楼只有一个电梯,给出一个有N个正整数的需求目录,电梯一次停在目录上给出数字所对应的楼层。电梯上升一层需要6秒,下降一层需要4秒,每一次停下会在该层停留5秒。
根据此需求目录,求出电梯完成此目录的总时间。电梯的初始位置为第0层,并且在完成目录后,电梯不必回到底层。
Input Specification:
每次输入一个案例,每个案例包括一个正整数N,以及N个整数,并且所有输入的数字不可以超过100.
Output Specification:
每个案例输出总时间,占一行。
Sample Input:
3 2 3 1
Sample Output:
41
分析
这道题其实很简单,可能唯一需要注意的地方就是判断电梯是上升还是下降,然后根据对应的移动方式计算时间。考虑到要比较判断电梯相对前一个运动之后,对应下一步是上升还是下降,或者是等待的情况,我设置了两个变量s、n。具体运行方式,我觉得代码已经很清晰的展现了,就不赘述了:)
代码
#include<iostream>
using namespace std;
int s;
int elevator(int n){
if(n==s) return 5;
else if(n>s) {
return (n-s)*6+5;
}
else{
return (s-n)*4+5;
}
}
int main(){
int t,n,time;
while(1){
s=0;
time=0;
cin>>t;
if(t==0) break;
while(t){
cin>>n;
time+=elevator(n);
t--;
s=n;
}
cout<<time<<endl;
}
}
结果
【注】有时候在函数功能部分,如果设置if - else if - else不当,程序的运行结果可能会出错(尤其在递归函数中)。