首页 > 如何求三个自然数中最小的一个?

如何求三个自然数中最小的一个?

不能做任何比较操作,不能用系统内部的函数。
如何找到 α、β、γ 三个正数中最小的那个?


看了上面几个答案,尤其是JS代码的那个

a ^ b = 0; //说明a = b

下面是代码:

int min(int a, int b) {
    return (a ^ (a % b)) ? b : a;
}

如果a < b,a % b 返回 a ,那么 a ^ a 的结果便是 0,函数返回 a ;
同理其他的可得。


PHP min(α、β、γ)


Javascript代码

for (var i = 0; ; i++) {//从0开始往大的试...
//用位操作 - 异或,如果为0则说明每位都相同,即相等,!0为true
    if (!(i ^ a) {
        alert('a:' + a);
    } else if (!(i ^ b) {
        alert('b:' + b);
    } else if (!(i ^ c) {
        alert('c:' + c);
    }
}

没测试...不知道对不对,就这思路...

想到另外一个代替比较的方法,不过貌似javascript这种弱类型语言才行,其他语言就不知道了:

    if (!((a/b)+'').indexOf('0.')) {
        alert('a比b小');
    }

a除以b后加上空字符串转为string类型,然后检查'0.'字符的位置,找不到则返回-1,取反为fasle,不在开始位置找到则大于0,取反为false,只有以'0.'开头时才会返回0,取反为true。
这种方法比开始的好多了,可以直接比较,不论有几个数,效率也很高了。

------------------------------------
好吧indexOf确实也算系统方法了。
替换一下

    var resultStr = (a/b)+'';
    if (!(resultStr[0]-0) && !(46^(resultStr[1]-0))) {
        alert('a比b小');
    }

这回真没用系统方法了,不过也确实隐含了很多系统方法...js的featrue

又写麻烦了

function _compare (a, b) {
    var resultStr = (a/b)+'';
    if (!(resultStr[0]-0)) {
        console.log('a比b小');
        return false;
    } else if (!a ^ b) {
        console.log('a和b相等');
        return true;
    } else {
        console.log('a比b大');  
        return true;  
    }
}
if (_compare(a, b)) {
    if (_compare(a, c)) {
        alert('a');
    } else {
        alert('c');
    }
} else {
    if (_compare(b, c)) {
        alert('b');
    } else {
        alert('c');
    }
}

就不用管小数点,第一位是0,肯定是0.xxx的小于1的小数。另外加上相等的判断。


同用 JavaScript 实现了一个 ... 这种方法不犯规吧 ..?

<script type="text/javascript">
function smallest( a, b, c ) {
    var min = function( a, b ) {
        return b + ( ( a - b ) & ( ( a - b ) >> 31 ) );
    }
    return min( a, min( b, c ) );
}

alert( smallest( 1, 2, 3 ) );
</script>

就能想到比较笨的方法。

>>> a, b, c = 3, 1, 2
>>> t= a < b and a or b
>>> t < c and t or a
1

或者

>>> li = [2, 1, 3]
>>> t = None
>>> for i in li:
	if t is None:
		t = i
	else:
		t = t < i and t or i

		
>>> t
1
【热门文章】
【热门文章】