题目描述 :
在某一高层建筑内只有一部电梯,当你按下一个数时,电梯会运行到那一层。已知电梯每上升一层需6秒,下降一层需4秒,
在需要停留的那层停留5秒。现有N个整数组成的一个需求列表,电梯将依次响应,电梯从0层开始运行,而在运行过程结束
之前不会返回0层。
注意,若出现相邻两个整数相等,代表在同一层执行了两个不同任务,可以理解为:电梯已经停了5秒,正要关门时又有人
在同一层按开门键,电梯又开门并停留5秒。
输入
输入分两行,第一行是一个正整数N(N<=1000),代表停留几次,第二行的N个数字代表这几次依次停留的楼层。
输出
输出电梯完成该任务序列所需的时间,单独占一行。
解题思路:
上升一层6秒,下降一层4秒,停留一次五秒。用数组把这几次停留的楼层储存起来,判断每个数与其相邻的后一个数的差值来判断
上升下降或者停留。
代码实现:
1 #include<stdio.h> 2 #include<math.h> 3 int main() 4 { 5 int N,i,cz,sj=0; 6 int a[1020]; 7 a[0]=0; 8 scanf("%d",&N); 9 for(i=1;i<=N;i++) 10 scanf("%d",&a[i]); 11 for(i=1;i<=N;i++) 12 { 13 cz=a[i]-a[i-1]; 14 if(cz<0) sj+=(-1)*cz*4; 15 else if(cz>0) sj+=cz*6; 16 else sj+=0; 17 } 18 printf("%d ",sj+N*5); 19 return 0; 20 }
易错分析:
1.数组的第一个元素是0,要首先给出来,因为从输入的第一个整数开始就开始计算时间。
2.前后两个数相同时不需要再另外加时间,因为只要出现一个整数就说明停留一次,最后加上N*5就可以计算所有停留时间。