小明放学程序设计

小明放学程序设计:

  • 交通灯的变化规律为:红>绿>黄>红>绿>黄...
  • 当抵达交通灯为绿灯时,无论倒计时为多少秒,都视为可以通过,且耗时为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

题目:

汉东省政法大学附属中学所在的光明区最近实施了名为“智慧光明”的智慧城市项目。具体到交通领域,通过“智慧光明”终端,可以看到光明区所有红绿灯此时此刻的状态。小明的学校也安装了“智慧光明”终端,小明想利用这个终端给出的信息,估算自己放学回到家的时间。 一次放学的时候,小明已经规划好了自己回家的路线,并且能够预测经过各个路段的时间。同时,小明通过学校里安装的“智慧光明”终端,看到了出发时刻路上经过的所有红绿灯的指示状态。请帮忙计算小明此次回家所需要的时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值