我是c#的初学者。所以我想解决这个问题:
你驾驶的速度有点太快,一名警察阻止你。编写代码来计算结果,编码为int值:0 =没有票,1 =小票,2 =大票。如果速度为60或更低,则结果为0.如果速度在61和80之间,则结果为1.如果速度为81或更高,则结果为2.除非是您的生日 - 在那一天,您的在所有情况下,速度可以高出5个。
我通过以下方式解决了这个问题:
class SpeedLimit
{
public int CaughtSpeeding(int speed, bool isBirthday)
{
if (speed < 61 || (speed < 66 && isBirthday == true))
{
return 0;
}
else if (speed >= 61 && speed <= 80 && isBirthday == false)
{
return 1;
}
else if (speed >= 66 && speed <= 85 && isBirthday == true)
{
return 1;
}
else
return 2;
}
}
它有效,但我必须在生日时每次手动添加5个。我认为这不是本次练习的目的。那么还有其他方便的解决方法吗?
答案 0 :(得分:3)
最快的胜利是以5倍的速度来处理你的生日:
public int CaughtSpeeding(int speed, bool isBirthday)
{
if (isBirthday) speed -= 5;
/*Birthday fully considered*/
答案 1 :(得分:0)
您可以预先计算使用isBirthday减去5的变量的速度。这样可以使代码更清晰。
class SpeedLimit
{
public int CaughtSpeeding(int speed, bool isBirthday)
{
var measuredSpeed = isBirthday
? speed - 5
: speed;
if (measuredSpeed < 61)
{
return 0;
}
else if (measuredSpeed >= 61 &&
measuredSpeed <= 80)
{
return 1;
}
else
{
return 2;
}
}
}
答案 2 :(得分:0)
一点点数学也可以提供帮助。 60
和80
之间的差异为20
,将偏移量视为40
,因为您说包容性我们考虑通过计算中的因子递减速度。因此票价将以这种方式计算。
ticket = Min(Max(speed - 1 - 40, 0) / 20, 2);
考虑生日时间
public static int CaughtSpeeding(int speed, bool isBirthday)
{
if(isBirthday) speed -= 5;
return (int)Math.Min(Math.Max(speed - 1 - 40, 0)/20, 2);
}