201812-2 小明放学 C语言版

错误代码:
#include<stdio.h>

int main()
{
int r,y,g,n,k,sum=0,t;
scanf("%d %d %d",&r,&y,&g);//红灯 r 秒,黄灯 y 秒,绿灯 g 秒
scanf("%d",&n);
while(n–)
{
scanf("%d %d",&k,&t);
//无灯情况下
if(k0)
{
sum+=t;
}
//红灯
if(k
1)
{
t=(r-t)+sum;
t%=(r+g+y);
if(t<r) //若持续时间小于红灯总时间
sum+=(r-t);
else if(t>=g+r) //若持续时间大于红+绿总时间且小于黄灯总时间,即在黄灯状态下
sum+=(r+r+g+y-t);
}
//黄灯
if(k2)
{
t=(r+g+y-t)+sum;
t%=(r+g+y);
if(t<r)
sum+=(r-t);
else if(t>=g+r)
sum+=r+(r+g+y-t);
}
//绿灯
if(k
3)
{
t=(r+g-t)+sum;
t%=(r+g+y);
if(t<r)
sum+=(r-t);
else if(t>=g+r)
sum+=r+(r+g+y-t);
}
}
printf("%d",sum);
return 0;
}

错误原因://与 小明上学 一题的不同之处在于所有灯的显示颜色及时间都是出发时刻的
//本题的一个陷阱,结果可能会超出整型的范围,要定义成长整型 (出错地方)
//注意信号灯的转换规律为红——绿——黄

正确代码:

#include<stdio.h>

int main()
{
long long sum=0,t;
int r,y,g,n,k;
scanf("%d %d %d",&r,&y,&g);//红灯 r 秒,黄灯 y 秒,绿灯 g 秒
scanf("%d",&n);
while(n–)
{
scanf("%d %d",&k,&t);
//无灯情况下
if(k0)
{
sum+=t;
}
//红灯
if(k
1)
{
t=(r-t)+sum;
t%=(r+g+y);
if(t<r) //若持续时间小于红灯总时间
sum+=(r-t);
else if(t>=g+r) //若持续时间大于红+绿总时间且小于黄灯总时间,即在黄灯状态下
sum+=(r+r+g+y-t);
}
//黄灯
if(k2)
{
t=(r+g+y-t)+sum;
t%=(r+g+y);
if(t<r)
sum+=(r-t);
else if(t>=g+r)
sum+=r+(r+g+y-t);
}
//绿灯
if(k
3)
{
t=(r+g-t)+sum;
t%=(r+g+y);
if(t<r)
sum+=(r-t);
else if(t>=g+r)
sum+=r+(r+g+y-t);
}
}
printf("%lld",sum);
return 0;
}

相关文章:

  • 2021-08-04
  • 2021-04-24
  • 2021-04-09
  • 2021-11-10
  • 2021-04-28
  • 2022-12-23
  • 2021-11-21
  • 2021-12-20
猜你喜欢
  • 2022-12-23
  • 2021-07-01
  • 2021-12-09
  • 2021-05-31
  • 2021-07-18
  • 2021-04-15
  • 2021-04-09
相关资源
相似解决方案