题目链接
计算机软件能力认证考试系统http://118.190.20.162/view.page?gpid=T81
题目分析
本题和上题类似,需要计算小明经过各个路口等待红灯和黄灯的时间。由于红绿灯的变化是具有周期性的,本题可用总时间除以周期后的余数来进行判断。而这些判断可以仅通过三目运算符来完成。完整代码如下:
#include<iostream>
using namespace std;
int main(int argc,char* argv[])
{
int r,y,g,n,type,time;
long long int sum = 0;
cin >>r>>y>>g>>n;
for(int i=0;i<n;i++)
{
cin >>type>>time; // 路口类型和初始时间
switch(type)
{
case 0:
{
sum += time;
break;
}
case 3: // 绿灯
{
sum += (sum%(r+g+y)<time||(r+g+y-sum%(r+g+y))<(g-time))?0:(r+y+time-sum%(r+g+y));
break;
}
case 2: // 黄灯
{
sum += (sum%(r+g+y)>=time+r&&sum%(r+g+y)<g+r+time)?0:((sum%(r+g+y)<time+r)?(time+r-sum%(r+g+y)):(r+g+y-sum%(r+g+y)+time+r));
break;
}
case 1: // 红灯
{
sum += (sum%(r+g+y)>=time&&sum%(r+g+y)<time+g)?0:((sum%(r+g+y)<time)?(time-sum%(r+g+y)):(r+g+y-sum%(r+g+y)+time));
break;
}
}
}
cout <<sum<<endl;
return 0;
}