注册 登录
编程论坛 C++教室

[分享]交换两个数不用第三个变量

ldk0501 发布于 2006-09-20 19:23, 4616 次点击

这是我上次碰到的一道面试题目
当时由于时间太紧
没有想出来 后来回来想了一下
想与大家分享一下
#include <iostream> //包含头文件
using namespace std;
int main()
{
//定义变量
int a=1;
int b=2;
//交换前
cout<<"交换前:"<<endl;
cout<<"a="<<a<<" b="<<b<<endl;
//交换变量
a=a+b;
b=a-b;
a=a-b;
//交换后
cout<<"交换后:"<<endl;
cout<<"a="<<a<<" b="<<b<<endl;
return 0;
}

30 回复
#2
SNAKEQX2006-09-21 18:27
楼主强,做三次运算和加一个变量的开销哪个更快呢??
#3
yushui2006-09-21 18:45
using namespace std这个是什么意思哦  我怎么没学呢
#4
朦朦胧胧2006-09-23 10:16

强!学到一招了

#5
wfpb2006-09-23 12:17
a^=b^=a;
b^=a;
#6
AKALIS2006-09-23 12:30
void swap1(int& a,int& b)
{
a=a^b;
b=a^b;
a=a^b;
cout<<a<<b<<endl;
}
#7
freeforever2006-09-23 17:54
用5楼或6楼的吧,大数的时候不会溢出
#8
abco2006-09-24 15:41

有点意思

#9
帅加加2006-09-24 16:29
a=(a+b)-(b=a);//先执行a+b,再执行b=a
这样就可以了
#10
majia7752006-09-25 08:36
以下是引用SNAKEQX在2006-9-21 18:27:12的发言:
楼主强,做三次运算和加一个变量的开销哪个更快呢??

估计你看的教程比较老了点,换本新的看吧.

#11
wyg_6162006-09-25 10:30

受教!!!thanks

#12
雨夜微醺2006-09-25 11:08
9楼的大哥牛.
#13
C_Student2006-09-26 01:14
嗯,9 楼的朋友果然强,一句就OK.
学习程序语言,应该是一种很好的脑力训练,
思考上的训练,同一种结果,过程确千变万化,
如何有效的精简程序,且结果更精确,是一大考验…
程序设计真是好…而且还可以写自己喜欢的工具来用.
就算不当专业,休闲学也是一大乐趣.尤其是一个问题找到答案时…
#14
★红狼2006-09-26 13:39
考试的题目都是很垃圾。
用个中间变量,天也不会塌。
#15
corrupt2006-09-26 17:32
lz的可以,就算溢出,结果还是正确的
#16
_tao2006-09-26 20:23

新手哦,看了上面的方法,看来以后可以受益菲浅啊!
以后还希望各位高手多多帮忙啊

#17
cjl2062212006-09-27 12:48
用引用是否要好点呢?
#18
笨a小孩2007-05-17 20:29

的确不是一般的牛!!
快赶上疯牛了 !
服了!!!!

#19
neverDie2007-05-17 20:53
楼主的跟9楼的思想一样,后一个更好看
#20
aipb20072007-05-17 20:59
够厉害!
#21
kisscjy2007-05-17 22:14
我比较菜~~


想问一下a^b这个运算式代表什么意思啊?
#22
raulxxyuer2007-05-17 22:22

6楼的是什么意思呢??? ^ 这个符号?

#23
raulxxyuer2007-05-17 22:33
知道了,是异或运算
#24
kisscjy2007-05-17 22:43
那a^b如何异或啊??

请解释明白点

谢谢
#25
cbingli2007-05-17 22:47

呵呵,我是想不到

#26
PcrazyC2007-05-17 23:59
转换为二进行制数,和位比较,相同结果中的该位就为0,不同该位就为1
#27
kisscjy2007-05-18 00:10
谢谢了~~~
#28
herbert_19872007-05-18 01:11

9楼的方法最简捷,运行效率也最快。

#29
天下第二刀2007-05-23 11:34
a=(a+b)-(b=a);//先执行a+b,再执行b=a
这样就可以了


这个不错

[此贴子已经被作者于2007-5-23 11:36:42编辑过]

#30
lishixiong2007-05-26 11:58

两个字符交换不用第三变量可以吗?

#31
zkkpkk2007-05-26 15:44
以下是引用kisscjy在2007-5-17 22:43:26的发言:
那a^b如何异或啊??

请解释明白点

谢谢

你把他转成2进制,同为0或1为1不同为0

1