实现close_far解决方案逻辑
本文关键字:解决方案 far close 实现 | 更新日期: 2023-09-27 18:20:33
我已经有一段时间没有使用C#了(2年),我正在努力寻找最有效的方法来解决这个问题。
http://codingbat.com/prob/p160533
问题声明:
给定三个int,a b c,如果一b或c的"接近"(与a相差最多1),而另一个是"远",与其他两个不同值增加2或更多。注意:abs(num)计算一个数字的绝对值。
close_far(1,2,10)→正确
close_far(1,2,3)→错误
close_far(4,1,3)→真实
我使用的是Visual Studio Community 2015。
我才刚开始,这不是为了上学,而是为了工作。
如有任何帮助,我们将不胜感激。
这会有帮助吗?尽管我相信你一定是想出了这样的办法。
public static bool Foo(int a, int b, int c)
{
var x = Math.Abs(a-b);
var z = Math.Abs(c-a);
var close = x>z?c:b;
var far = x>z?b:c;
return Math.Abs(close-a)<=1
&& Math.Abs(far-a)>=2
&& Math.Abs(far-close)>=2;
}
我会这样解决它:
private static bool closeFar(int a, int b, int c)
{
bool bIsNear = Math.Abs(a - b) <= 1;
bool cIsNear = Math.Abs(a - c) <= 1;
if (!(bIsNear^cIsNear))
{
return false;
}
int far = bIsNear ? c : b;
return Math.Abs(far - a) >= 2 && Math.Abs(c - b) >= 2;
}
因为这是我可以使用XOR运算符的少数几次之一。