题目来源:
https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1121
Description
在某一高层建筑内只有一部电梯,当你按下一个数时,电梯会运行到那一层。已知电梯每上升一层需6秒,下降一层需4秒,在需要停留的那层停留5秒。现有N个整数组成的一个需求列表,电梯将依次响应,电梯从0层开始运行,而在运行过程结束之前不会返回0层。
注意,若出现相邻两个整数相等,代表在同一层执行了两个不同任务,可以理解为:电梯已经停了5秒,正要关门时又有人在同一层按开门键,电梯又开门并停留5秒。
Input
输入分两行,第一行是一个正整数N(N<=1000),代表停留几次,第二行的N个数字代表这几次依次停留的楼层。
Output
输出电梯完成该任务序列所需的时间,单独占一行。
Sample Input
3
2 3 1
Sample Output
41
HINT
电梯从0层上升到2层运行时间为12秒,停留5秒,再上升第三层,运行时间6秒,停留5秒,再下降到第一层,运行时间8秒,停留5秒。共41秒。
题意描述:
输入总的需求次数n及n个需求数(楼层)(n<=1000)
计算并输出电梯完成该序列所需的时间
解题思路:
用数组a存储每一个指令,a[0]=0;比较当前指令和前一个指令的大小,如果大于等于,则判断大于时用上升楼层数乘以6加上5,等于时间加5,如果小于,则下降楼层数乘以4加上5。直到所有指令处理完毕。
程序代码:
1 #include<stdio.h> 2 int main() 3 { 4 int n,i,a[1010],l,sum; 5 while(scanf("%d",&n) != EOF) 6 { 7 for(i=1;i<=n;i++) 8 scanf("%d",&a[i]); 9 10 a[0]=0; 11 for(sum=0,i=1;i<=n;i++) 12 { 13 if(a[i]>=a[i-1]) 14 { 15 if(a[i]>a[i-1]) 16 sum += (a[i]-a[i-1])*6+5; 17 else 18 sum += 5; 19 } 20 else 21 sum += (a[i-1]-a[i])*4+5; 22 } 23 printf("%d ",sum); 24 } 25 return 0; 26 }