目录
题目
题目链接:1008 Elevator (PAT (Advanced Level) Practice)
输入样例1(题目自带)
3 2 3 1
输出样例1
41
输入样例2(自编,特殊情况)
1 5
输出样例2
35
提交结果截图
解题思路及源代码
/******************************************************
* 解题思路:
* 1.分析样例:
* Input:3 2 3 1(第一个数字表示后面有3个请求)
* 按题中所述,开始在0层
* 故应该是0->2->3->1,又上一层楼6s,下一层楼4s,暂停5s
* 所以time = 3*6 + 2*4 + 3*5 = 18 + 8 + 15 = 41
* 2.解法:
* a.将所有要停的楼层存储在一个数组floors[N+1]中,N为要停的
* 楼层总数,floors[0] = 0(保存初始位置);总时长用total_time
* 表示。
* b.每次都用floors[i]-floors[i-1](i初值为1),如果结果为
* 正数,则total_time += 差值*6;
* 为负数则total_time += 差值相反数*4;
* c.最后total_time += 5*N。
* 3.考虑特殊情况:
* 如果只有一个需要暂停的楼层,则上述解法也能解决。
******************************************************/
#include <iostream>
using namespace std;
int main()
{
int N, total_time = 0;
cin>>N;
int* floors = new int [N+1];
floors[0] = 0;
int diff;//差值
for(int i = 1; i <= N; i++)
{
cin>>floors[i];
diff = floors[i] - floors[i-1];
if(diff > 0)
total_time += diff*6;
else if(diff < 0)
total_time += (-diff)*4;
}
total_time += N*5;
cout<<total_time;
return 0;
}