小明放学程序设计:
- 交通灯的变化规律为:红>绿>黄>红>绿>黄...
- 当抵达交通灯为绿灯时,无论倒计时为多少秒,都视为可以通过,且耗时为0;
- 黄灯不能通过;
明确以上几点后便可设计程序,本题没有涉及算法,仅考验程序设计和逻辑推理。
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int light(int i,int r,int y,int g,int k,int n);
main(){
int r,g,y,n,t,i,j;
int **p;
cin>>r>>y>>g>>n;
p=(int**)malloc(n*sizeof(int*));//开辟二维动态数组
for(i=0;i<n;i++)
p[i]=(int*)malloc(2*sizeof(int));
for(i=0;i<n;i++)
{
for(j=0;j<2;j++)
{
cin>>p[i][j];
}
}
for(i=0; ;)//耗时i,其递增量由每个测试点确定,当测试点遍历完毕结束循环
{
for(j=0;j<n;j++)//遍历每个测试点,并判断其耗时
{
if(p[j][0]==0)
{
i=i+p[j][1];
}
else//当测试点为交通灯时,通过调用函数判断耗时
{
i=i+light(i,r,y,g,p[j][0],p[j][1]);
}
}
if(j==n)
break;
}
cout<<i;
return 0;
}
int light(int i,int r,int y,int g,int k,int n)//形参:到达该测试点时已过的时间i,红黄绿灯的倒计时人r,y,g,初始交通灯状态,初始交通灯倒计时
{
int j;
for(j=0;j<i;j++)//经过时间i后,灯的变化过程模拟
{
n--;//灯的倒计时随i递减
if(n==0)
{
k--;//灯的变化顺序为 红黄绿 对应编号321 递减
if(k==0) k=3;
if(k==1) n=r;//根据灯的状态,重置相应的倒计时
if(k==2) n=y;
if(k==3) n=g;
}
}
if(k==3)
return 0;
else if(k==2)//灯为黄时,耗时应为该时间点倒计时+红灯总倒计时
return n+r;
else
return n;
}
样例输入
30 3 30
8
0 10
1 5
0 11
2 2
0 6
0 3
3 10
0 3
样例输出
46
题目:
汉东省政法大学附属中学所在的光明区最近实施了名为“智慧光明”的智慧城市项目。具体到交通领域,通过“智慧光明”终端,可以看到光明区所有红绿灯此时此刻的状态。小明的学校也安装了“智慧光明”终端,小明想利用这个终端给出的信息,估算自己放学回到家的时间。 一次放学的时候,小明已经规划好了自己回家的路线,并且能够预测经过各个路段的时间。同时,小明通过学校里安装的“智慧光明”终端,看到了出发时刻路上经过的所有红绿灯的指示状态。请帮忙计算小明此次回家所需要的时间。