题目链接在此。
思路
将输入保存在一个数组中,那么a[0]就是0。如果a[i]>a[i-1]表示上楼,a[i] < a[i-1]表示下楼。
注意:这个题我感觉有点不太合理的地方就是:“The elevator will stay for 5 seconds at each stop”,既然是每一个stop,那么如果若干次的请求是一样的,比如输入:4 5 5 5 5,那么只需要从0层到5层然后停一次就好,而这个题需要停4次。所以这句话“The elevator will stay for 5 seconds at each stop”将“stop”改成“request”会不会好点……
AC代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
int n;
int a[105];
scanf("%d",&n);
a[0] = 0; //初始化数组的第0个元素,方便判断第一个元素是上楼还是下楼
for(int i = 1; i <= n; i++){
scanf("%d",&a[i]);
}
int time = 0;
for(int i = 1; i <= n; i++){
if(a[i] > a[i-1]){ //上楼
time += (a[i]-a[i-1])*6; //加上上楼时间
}else if(a[i] < a[i-1]){ //下楼
time += (a[i-1]-a[i])*4; //加上下楼时间
}
time += 5; //每一个request都需要停
}
printf("%d\n",time);
return 0;
}