Code for human beings

All fool can write code that a computer can understand.


今天去参加淘宝的笔试,其中2道题目挺有意思的,和大家分享下:
1.不用比较运算符取两个int中的较小值:
这是我给出的答案:


return ( x / y * y+ y / x * x ) / (x / y + y / x);

这里主要运用的是 x / y, y / x 是0还是大于1来算出较小值
2.不引入临时变量交换两个int:
我的答案:

x = x ^ y;
y = x ^ y;
x = x ^ y;

证明过程:
因为异或是按位来异或的,所以以上公式(那段代码)x, y取任何值都可以看做是以下四种情况的组合:
1.a = 0; b = 0;
2.a = 0; b = 1;
3.a = 1; b = 0;
4.a = 1; b = 1;
其中a, b为x, y二进制中对应的某一位(即若a为x的第N位, 那么b为y的第N位)。
容易证明:以上公式对上面四种情况都成立,证明终了。

0 评论

发表评论

订阅: 博文评论 (Atom)