1.折腾加减乘除运算
int Max(int a, int b)
{
int min = (a + b) / 2 - abs((a - b) / 2);
int max = (a + b) / 2 + abs((a - b) / 2);
return max;
}
据说这是 连小学生都会的算法! 最大数是 两数之和 加 两数之差 然后除以2 。
不论 a、b 是正数还是负数,还是一个正数一个负数,还是一个负数一个正数,还是相同的值,都能够正确判断出最小值与最大值。但是某些语言中,若 a、b 是小数,则在进行除运算时为浮点类型,而浮点类型是不精确的,与实际值会有一丁点的误差,这个就根据不同的语言不同处理了。
2.利用数组。
int max(int a, int b)
{
int pair[2] = {a, b};
return pair[a < b];
}
这个用到了"<"的比较符,不知道能否符合规则。利用true为1,false为0的这种思路还是可以借鉴的。
3.利用位运算
算法对x、y按位比较,简单地说,如果不考虑+、-号,则在第一次出现两者的位不相同时,该位是1的值比较大,如
00001111111100001111000011110000
00001110111100111111110011111010
左数第8位上,前者是1,后者是0,所以前者比后者大。
对这个算法早有神贴进行过深入研究。请参阅http://www.chinaunix.net/jh/23/422544.html