两个数据交换,不能用第三个变量?

[复制链接]
 楼主| areshan 发表于 2011-4-11 14:03 | 显示全部楼层 |阅读模式
想到在面试中2次问到的C题目,不知道该怎么回答,拿出来谈论下,看看大家是不是被问到过!
sdpz 发表于 2011-4-11 14:42 | 显示全部楼层
b = b ^ a;
a = a ^ b;
b = b ^ a;
这东西需要有经验并且记住。面试时考脑筋急转弯有点为难人。

评分

参与人数 1威望 +4 收起 理由
McuPlayer + 4 OK

查看全部评分

ayb_ice 发表于 2011-4-11 15:01 | 显示全部楼层
其实这只是考你的思维能力
上面的效率其实比较低,不如定义个中间变量
zhesiniya 发表于 2011-4-11 15:02 | 显示全部楼层
a=a+b;
b=a-b;    //原来的a给b
a=a-b;   //a+b-原来的a=原来的b
OK了。
ljm810010 发表于 2011-4-11 15:51 | 显示全部楼层
a=a*b;
b= a/b;
a=a/b;
-----------------
a=pow(a,b);
b=pow(a,1/b);
a=pow(a,1/a);:lol
lihui19839 发表于 2011-4-11 17:18 | 显示全部楼层
使用4和5楼的方法虽然也可以,但是如果数据溢出了咋办?建议还是用逻辑来做比较好。
ljm810010 发表于 2011-4-11 17:20 | 显示全部楼层
4楼的数据就算溢出,结果仍然正确。
5楼的都是浮点。
 楼主| areshan 发表于 2011-4-11 17:23 | 显示全部楼层
还来这样!记住了,以后再也不会被人给唬住了!
 楼主| areshan 发表于 2011-4-11 17:25 | 显示全部楼层
先合体,在分身!有点意思!
SmartEnergy 发表于 2011-4-11 17:33 | 显示全部楼层
瞒天过海,内在逻辑是隐含使用了ALU。

1. a+b=>ALU
2. ALU-a=>a
3. ALU-b=>b
jack_shine 发表于 2011-4-11 22:24 | 显示全部楼层
恩,学习了
xlsbz 发表于 2011-4-11 22:26 | 显示全部楼层
能否解释详细点   看不懂啊  怎么弄的 挺厉害啊
ejack 发表于 2011-4-12 08:02 | 显示全部楼层
异或运算的天然属性……
huangqi412 发表于 2011-4-12 08:45 | 显示全部楼层
这个题跟卖弄运算符优先级一样华丽丽。
batsong 发表于 2011-4-12 08:52 | 显示全部楼层
C语言教学考试都是大纱布

成天纠结优先级,结合性,加个括号纠结的一比
Wxy8030 发表于 2011-4-12 09:19 | 显示全部楼层
考这个题目纯属于吃饱了撑的!

如果有企业考这个题目,这种狗屁地方不去也罢!
刘前辈 发表于 2011-4-12 10:06 | 显示全部楼层
二楼应该是面试官期望的正解。——没有再好的了。照此做出来就可以被录取了。
b = b ^ a;
a = a ^ b;
b = b ^ a;

其实这是逻辑代数初等解法,不好证明的。记得当年上课教授证明这个等式的时候,是拿了2个实际二进制数证明的,比如a=0x55,b=0xaa; ——这算什么证明?如今大学里教授就这水平?
结论当然是: 一个二进制数b经过与另一个数a 2次(或者偶数次)抑或运算之后,仍还原为b:   即:     b^a^a=b;

既然教授都没证明,那就不好**了。死记硬背呀!

谁能证明一下?我知道,面试官也不过是看了书上的考试题来出题,其实他也证明不了。
谁能换一种让面试官不知道的,书上没讲过的写法,那面试官肯定立马下课。

就到这个企业去,去了就当人力资源管理部经理。

mbutterfly 发表于 2011-4-12 10:10 | 显示全部楼层
恩,不是C语言的所有东西都适合到实际应用中的。如果题目能考代码量,RAM占用大小,运行时间等,还比较实际
abin0415 发表于 2011-4-12 13:01 | 显示全部楼层
谭浩强的C语言书(第三版)里第十二章有这个。第321页,12.1.3节。好好看看书吧。
hongdan0714jin 发表于 2011-4-12 13:17 | 显示全部楼层
2# sdpz
我们c++老师介绍完之后,明确警告她的学生不允许用这方法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

728

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部