约束
不能使用if、?、switch语句实现。
方法
1:取平均值 (使用abs())
int max1(int a, int b)
{
//larger: (a+b + abs(a-b)) / 2
//smaller:(a+b - abs(a-b)) / 2
return (a+b + abs(a-b)) / 2;
}
2:利用数组
int max2(int a, int b)
{
int array[2] = {a, b};
//larger: array[a < b];
//smaller: array[a > b];
return array[a < b];
}
3:根据a/b来判断
a<b时,a/b=0,前面为b*(b/a),后面为b/a,那么结果为b
a=b时,a/b=1,前面为a+b=2a,后面为2,那么结果为a
a>b时,b/a=0,前面为a*(a/b),后面为a/b,那么结果为a
int max3(int a, int b)
{
//larger: (a*(a/b) + b*(b/a)) / (a/b + b/a);
//smaller: (b*(a/b) + a*(b/a)) / (a/b + b/a);
return (a*(a/b) + b*(b/a)) / (a/b + b/a);
}
另外还有通过移位判断。