不能做任何比较操作,不能用系统内部的函数。
如何找到 α、β、γ 三个正数中最小的那个?
看了上面几个答案,尤其是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