c#如果一个或两个都大于0,则两个数字中的最小值
本文关键字:两个 数字 最小值 大于 一个 如果 | 更新日期: 2023-09-27 18:06:25
我要寻找的逻辑是,如果其中一个数字>=0(它们不一定是(,那么返回两个数字中也大于0的最小值。我为它写的代码太难看了,我都不好意思发布它!
编辑:样品1,-1=>15,6=>5-1,-1=>0
(如果两者都小于0,则返回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)
};