我正在寻找的逻辑是,如果其中一个数字是> = 0(它们不一定是),那么返回两个中的最小值也大于0.代码I'为它写的是如此丑陋,我很惭愧发布它!
编辑: 样品 1,-1 => 1 5,6 =>五 -1,-1 => 0
(如果两者都小于0,则返回0)
答案 0 :(得分:14)
我将尝试我的精神力量,并假设如果两者都为零,你想要返回0.
换句话说:
return x < 0 && y < 0 ? 0
: x < 0 ? y
: y < 0 ? x
: Math.Min(x, y);
我确信我可以做得更好......
如果它们不都大于0,那么至少有一个小于零,所以你只关心它们中的较大者,或者如果它们都小于零则为0 。否则,我们只采取最低限度。
return x < 0 || y < 0 ? Math.Max(Math.Max(x, y), 0) : Math.Min(x, y);
如果您不太关心性能,可以使用:
new[] { x, y }.Where(z => z > 0)
.DefaultIfEmpty() // Make sure there's at least one entry
.Min();
坦率地说,这些都不是非常好,IMO。我想要对他们中的任何一个发表评论......
答案 1 :(得分:7)
这太丑了吗?
private int GetSmallestNonNegative(int a , int b)
{
if (a >= 0 && b >= 0)
return Math.Min(a,b);
else if (a >= 0 && b < 0)
return a;
else if (a < 0 && b >= 0)
return b;
else
return 0;
}
答案 2 :(得分:6)
我认为这很简单,可以扩展到任何数字参数,并且相当好地反映了问题的原始措辞(“一组数字的最小值也大于或等于0”):
new[] { a,b,0 }.Where(x => x >= 0).Min();
答案 3 :(得分:2)
If (a>=0 &&b>=0)
return Math.Min(a,b);
var min =Math.Max(a,b);
return min<0 ? 0: min;
答案 4 :(得分:1)
Math.Max (Math.Sign (Math.Max (x,0)), Math.Sign (Math.Max (y, 0))) == 0 ? 0 : ((Math.Sign (Math.Max (x,0)) + Math.Sign (Math.Max (y, 0))) == 2 ? Math.Min (x, y): Math.Max (x, y ))
答案 5 :(得分:1)
return (a >=0 && b>=0) ? Math.Min(a,b) : (Math.Max(a,b) < 0 ? 0 : Math.Max(a,b));
答案 6 :(得分:1)
return (a >= 0 || b >= 0) ? Math.Min(Math.Max(0,a), Math.Max(0,b)) : 0;
(编辑)小的变化,当其中任何一个为零时,性能稍好一些
return (a > 0 || b > 0) ? Math.Min(Math.Max(0,a), Math.Max(0,b)) : 0;
答案 7 :(得分:1)
我希望这会有所帮助。
Max= ((num1+num2)+Math.Abs(num1-num2))/2
and Min= ((num1+num2)-Math.Abs(num1-num2))/2