从固定数(在这种情况下为3)的值中找到最小非零正值的最佳算法是什么,如果没有正问题则返回0?
我的天真方法如下(在Delphi中,但随意使用你喜欢的任何东西),但我认为有一种更优雅的方式.
value1Temp := MaxInt; value2Temp := MaxInt; value3Temp := MaxInt; if ( value1T > 0) then value1Temp := value1; if ( value2 > 0) then value2Temp := value2; if ( value3 > 0) then value3Temp := value3; Result := Min(value1Temp,Min(value2Temp,value3Temp)); if Result = MaxInt then Result := 0;
解决方法
我这样做:
Result := MaxInt;
if value1 > 0 then Result := min(Result,value1);
if value2 > 0 then Result := min(Result,value2);
if value3 > 0 then Result := min(Result,value3);
if Result = MaxInt then Result := 0;
如果你想在一个有任意数量问题的循环中,那么:
Result := MaxInt;
for I := 1 to N do
if value[I] > 0 then Result := min(Result,value[I]);
if Result = MaxInt then Result := 0;
如果希望value数组从零开始,请将for循环更改为:0到N-1
我认为这段代码非常清楚地知道正在做什么.
将“then”语句放在同一行上会使代码在这种简单的情况下看起来更清晰,但如果您觉得有必要,可以随意将“then”语句缩进到下一行.