黑马程序员技术交流社区

标题: 给大家出个简单的交换两个变量值的算法 [打印本页]

作者: 李奔    时间: 2013-6-9 20:19
标题: 给大家出个简单的交换两个变量值的算法
本帖最后由 李奔 于 2013-6-10 14:55 编辑

定义两个int类型的变量,如:a和b分别赋值为10和5,不借助第三方变量写程序交换两个变量的值。
你首先想到的是什么方法?能想到几种方法?
只说出思路即可。
谢谢参与!
作者: wanghuailin1030    时间: 2013-6-9 20:25
这个有,我网上看过。
a=10,b=15,在不用第三方变量的前提下,把a,b的值互换
答:a=a+b;b=a-b;a=a-b;
还有变态要求,需要代码最短呢。有两个结果:
1) a^=b^(b^=a^b); // 13个字节
2) a=b+(b=a)*0; // 11个字节
这个可行吧?
作者: 吃肉的小浣熊    时间: 2013-6-9 21:12
通过异或运算符号可以进行变量的交换!这是我自己写的。
  int a = 10;//a=1010
            int b = 5;//b=101;  
            a = a ^ b;//1010^101=1111;
            b = a ^ b;//1111^101=1010;b=10;
            a = a ^ b;//1111^1010=101;a=5;
            Console.WriteLine("交换后的a={0},b={1}", a, b);
                Console.ReadKey();
作者: 李奔    时间: 2013-6-9 21:16
wanghuailin1030 发表于 2013-6-9 20:25
这个有,我网上看过。
a=10,b=15,在不用第三方变量的前提下,把a,b的值互换
答:a=a+b;b=a-b;a=a-b;

不错,但还有更变态的!
作者: 李奔    时间: 2013-6-9 21:17
还有其他想法的吗?
谢谢参与!
作者: fcyan86    时间: 2013-6-9 22:15
本帖最后由 fcyan86 于 2013-6-9 22:24 编辑
李奔 发表于 2013-6-9 21:17
还有其他想法的吗?
谢谢参与!

a=a+b-(b=a);a=b-a+(b=a);


作者: 陈行    时间: 2013-6-9 23:46
支持楼主发出这种经典题  可是我不会~
作者: 李奔    时间: 2013-6-10 00:02
大家还有其他的方法吗?
我这里还有几种。
作者: 陈行    时间: 2013-6-10 00:04
楼主能不能讲下异或运算符怎么计算啊  我还没了解
作者: 陈行    时间: 2013-6-10 00:04
李奔 发表于 2013-6-10 00:02
大家还有其他的方法吗?
我这里还有几种。

大半夜的一般人都睡觉了
作者: popoluno    时间: 2013-6-10 10:21
这是一个以前经历过的一个面试题,当时要求最短代码,我没有答上来,后来看了网上的解法,具体如下:
a=a+b;b=a-b;a=a-b;这个比较易懂,但不是最短代码!
作者: 李奔    时间: 2013-6-10 10:28
popoluno 发表于 2013-6-10 10:21
这是一个以前经历过的一个面试题,当时要求最短代码,我没有答上来,后来看了网上的解法,具体如下:
a=a+b ...

谢谢参与,我第一个想到的也是这样。
既简单又明了。
作者: 李奔    时间: 2013-6-10 14:20
我又想到一种,不过这种要求除数不能为0.
类似于+、-
a=a*b;b=a/b;a=a/b;
作者: 李奔    时间: 2013-6-10 14:36
最后总结一下:
交换两个数值类型变量的值通常有四种方法:
1.借助中间变量
2.加减法
3.乘除法(要求除数不能为0)
4.按位异或

谢谢大家的参与!
作者: fcyan86    时间: 2013-6-10 15:12
李奔 发表于 2013-6-10 14:36
最后总结一下:
交换两个数值类型变量的值通常有四种方法:
1.借助中间变量

你试试交换两个string类型的变量,不用中间变量怎样进行:lol
作者: 李奔    时间: 2013-6-10 15:18
fcyan86 发表于 2013-6-10 15:12
你试试交换两个string类型的变量,不用中间变量怎样进行

String类型是引用类型,传递的是引用。
我还真不会,请赐教。
:lol
作者: fcyan86    时间: 2013-6-10 15:22
李奔 发表于 2013-6-10 15:18
String类型是引用类型,传递的是引用。
我还真不会,请赐教。

我也不会,如果是c可以用指针,csharp不知道怎么干:lol
作者: 关关雎鸠    时间: 2013-6-10 18:44
异或。。。int a = 5, b = 10;
作者: 关关雎鸠    时间: 2013-6-10 18:46
异或~

int a = 5, b = 10;

a = a ^ b;
b = a ^ b;
a = a ^ b;

位运算,最快的!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2