交通
算法描述
市民们抱怨红绿灯设置得不合理,导致路上的时间太长交通局应市民要求,给出了红绿灯的控制算法在此场景中,请你计算出已知红绿灯控制算法的情况下,一辆车通过一段路程所需的总时间信号灯算法:一共只有红灯或绿灯两个状态,初始状态都是绿灯,给出信号持续时间的数组lights,数组中信号灯按照汽车经过的顺序排列每个信号灯之间相隔150米,汽车在第一个信号灯之前150米起步,在最后一个信号灯之后的150米停下来,假设汽车没有加速、减速,速度要么是0,要么就是以speed米/秒匀速行驶返回汽车到达终点时所需的时间,最后的时间需将小数部分去掉(55.5取55,44.9取44)
参数定义
类名 Traffic方法 time输入参数 vector <int>, int输出 int方法声明 int time(vector <int> lights, int speed)
限制条件
speed 可以为如下大小:5, 10, 15, 20, 25, or 30.lights 包含[1, 50]个元素lights 中的每个元素都是整数,大小在[10, 60]之间
例子
输入
lights: {10,10,10}speed: 30输出
30
在time = 5时,汽车到达第一个信号灯, 信号灯依然是绿灯,汽车直接通过 在time = 10时,汽车到达第二个信号灯, 刚好变红1. 等待10秒,变绿 在time = 20时, 信号灯变绿,汽车立即以30米/秒的速度行驶而过 在time = 25时,汽车到达第三个信号灯,绿灯,直行 在time = 30时,汽车到达终点(第三个信号灯的后150米)
测试实例
实例一
输入
{10,10,10}20
输出
35
实例二
输入
{10,20,30}20输出
30
实例三
输入
{10,11,12,13,14,15}5输出
240
实例四
输入
{60,60,60,60,60,60,60,60,60,60}5输出
630
实例四
输入
{55,29,26,12,19,39,18,20,23,28,56,20,59,48,33,40,30,60,19}25输出
252
代码
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
class Traffic {
public:
int time(
vector<int> lights,
int speed) {
float totalTime =
0.0;
for(
vector<int>::const_iterator iter = lights.cbegin(); iter < lights.cend(); iter++) {
totalTime +=
150.0 / speed;
int needStop = totalTime / (*iter);
if(
0 != needStop %
2)
totalTime += *iter -
fmod(totalTime, (*iter));
}
totalTime +=
150.0 / speed;
return floor(totalTime);
}
};
int main() {
vector<int> lights {
55,
29,
26,
12,
19,
39,
18,
20,
23,
28,
56,
20,
59,
48,
33,
40,
30,
60,
19};
int speed =
25;
Traffic tc;
int ret = tc.time(lights, speed);
cout << ret << endl;
cout.flush();
}