acm_1006
来源:互联网 发布:java中public的作用 编辑:程序博客网 时间:2024/06/04 19:17
题意:
题目很简单,大致意思为有一架电梯,上一层楼需要6秒,而下一层楼需要4秒,到达指定的楼层后则需要停留5秒.每次开始的时候电梯都会停在第0层。
输入:输入一个正整数N,表示电梯需要停留的次数,然后输入每次要停留的楼层
输出:电梯按照指定顺序走完全程需要花费的时间。
解题思路:
这道题目我感觉比前面几道都简单,这道题好像跟贪心没有什么太大的联系,没有什么最优的方法之说,要按照顺序指定走完,唯一有点小弯的地方就是要判断电梯是上楼还是下楼,因为上下的时间不一样。而电梯停留的时间是一样的。电梯走完全程所需要的时间是上楼的时间+下楼的时间+停留的时间。而我们知道电梯要停留的次数N,因此停留的时间=5*N。
然后将电梯需要停留的楼层数据保存在数组elevator里,注意,数组的第一个元素是0(0层)。然后判断elevator[i]与elevator[i-1]的大小,若前者大,表明此时正在上楼,时间=(elevator[i]-elevator[i-1])*6;若后者大,表明此时正在下楼,下楼的时间=(elevator[i-1]-elevator[i])*4,把这些时间加起来就是整个的总时间。
感想:
我觉得这道题唯一让我有点阻碍的地方一个是判断电梯上楼上的层数,我忽略了0层这个重要的地方,第二个就是关于上楼下楼时间的相加。虽然这道题不难,但是轻松做完了感觉也挺好的。
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
int ElevatorTime(int a[],int n)
{
int SumTime = 0;
a[0] = 0;
for (int i = 1; i <=n; i++)
{
if (a[i] >a[i - 1])
{
SumTime = SumTime+(a[i] - a[i - 1]) * 6;
}
else
SumTime = SumTime+(a[i - 1] - a[i]) * 4;
}
SumTime = SumTime + n * 5;
return SumTime;
}
int main()
{
int elevator[101], n;
while (cin >> n)
{
if (n!= 0)
{
int SumTime = 0;
for (int i = 1; i <= n; i++)
{
cin >> elevator[i];
}
SumTime = ElevatorTime(elevator, n);
cout << SumTime << endl;
}
else
break;
}
return 0;
}