c#如果一个或两个都大于0,则两个数字中的最小值

本文关键字:两个 数字 最小值 大于 一个 如果 | 更新日期: 2023-09-27 18:06:25

我要寻找的逻辑是,如果其中一个数字>=0(它们不一定是(,那么返回两个数字中也大于0的最小值。我为它写的代码太难看了,我都不好意思发布它!

编辑:样品1,-1=>15,6=>5-1,-1=>0

(如果两者都小于0,则返回0(

c#如果一个或两个都大于0,则两个数字中的最小值

我要试试我的通灵能力,假设两者都为零,你想返回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();

坦率地说,这些都不是很好,我想和他们中的任何一个谈谈。。。

这太难看了吗?

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

我认为这很简单,可以扩展到任何数字参数,并且相当好地反映了问题的原始措辞("一组也大于或等于0的数字的最小值"(:

new[] { a,b,0 }.Where(x => x >= 0).Min();
If (a>=0 &&b>=0)
 return Math.Min(a,b);
var min =Math.Max(a,b);
 return min<0 ? 0: min;
return (a >=0 && b>=0) ? Math.Min(a,b) : (Math.Max(a,b) < 0 ? 0 : Math.Max(a,b));
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;

try(尽管没有美感(:

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 ))

我希望这会有所帮助。

Max= ((num1+num2)+Math.Abs(num1-num2))/2
and Min= ((num1+num2)-Math.Abs(num1-num2))/2

现在我们有了新的C#功能,您可以使用switch表达式和ValueTuple模式匹配来只测试每个变量一次:

var ans = (x < 0, y < 0) switch {
            (true, true) => 0,
            (false, true) => x,
            (true, false) => y,
            (false, false) => Math.Min(x, y)
        };

你也可以根据哪个更重要或你认为哪个更可读来改变测试:

var ans = (x >= 0, y >= 0) switch {
            (false, false) => 0,
            (true, false) => x,
            (false, true) => y,
            (true, true) => Math.Min(x, y)
        };