实现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。

我才刚开始,这不是为了上学,而是为了工作。

如有任何帮助,我们将不胜感激。

实现close_far解决方案逻辑

这会有帮助吗?尽管我相信你一定是想出了这样的办法。

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运算符的少数几次之一。