![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/61c6ef3c3dd8c2115ad151a027331f9e.png)
题目要求:
我们城市最高的建筑物只有一部电梯。请求列表由N个正数组成。数字按指定顺序指示电梯将停在的楼层。将电梯上移一层需要花费6秒钟,而将一层下移则需要4秒钟。电梯将在每个站点停留5秒钟。
对于给定的请求列表,您将计算完成列表上的请求所花费的总时间。电梯在开始时位于0楼,并且在满足请求后不必返回一楼。
输入格式:
有多个测试用例。每个案例包含一个正整数N,后跟N个正数。输入中的所有数字均小于100。N = 0的测试用例表示输入结束。该测试用例将不被处理。
输入样本:
1 2
3 2 3 1
0
输出样本:
17
41
题目分析:
输入的第一个字符代表N层楼,以空格为间,后续数字代表楼层变化
首先我们要知道是从1楼开始的,所以第一个楼层固定乘以6,
然后我们可以建一个数组,用来存放楼层编号,
用循环比较相邻两层楼的大小,若前一层比这层大,
则电梯是下降,反之为上升。用中间变量sum把时间相加,
最后再加上每层楼停留时间5秒就能得到答案。
代码:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int n,in;
int m[100];
while(cin >> n){ //输入的第一个数为后续有N层楼
int sum = 0,i = 0;
in = n;
if( n == 0 ){ //如果输入为0则结束
break;
}else{
while(in--){
cin >> m[i++]; //将输入的楼层赋值给数组保存
}
sum += 6*m[0]; //起点从零层起步,第二个数字是第一次的楼层
for(int j = 0;j < n-1 ;j++){
if(m[j] > m[j+1]){
sum += abs(m[j] - m[j+1])*4; //下降
}else if(m[j] < m[j+1]){
sum += abs(m[j] - m[j+1])*6; //上升
}
}
sum += n*5; //每层停留时间
}
cout<<sum<<endl;
}
return 0;
}