实现close_far解决方案逻辑

时间:2015-11-05 04:22:05

标签: c#

自从我使用C#(2年)以来,已经有一段时间了,我正试图找到解决此问题的最有效方法。

  

http://codingbat.com/prob/p160533

问题陈述:

给定三个整数,一个b c,如果有一个则返回True b或c是"关闭" (最多不同于1), 而另一个是"远",不同于另外两个 值为2或更多。注意:abs(num)计算数字的绝对值。

close_far(1,2,10)→真实 close_far(1,2,3)→False
close_far(4,1,3)→True

我正在使用Visual Studio Community 2015。

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

这会有帮助吗?虽然我相信你一定有这样的事情。

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;
}

答案 1 :(得分:1)

我会这样解决:

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