A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李奔 中级黑马   /  2013-6-9 20:19  /  3058 人查看  /  23 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李奔 于 2013-6-10 14:55 编辑

定义两个int类型的变量,如:a和b分别赋值为10和5,不借助第三方变量写程序交换两个变量的值。
你首先想到的是什么方法?能想到几种方法?
只说出思路即可。
谢谢参与!

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

23 个回复

倒序浏览
这个有,我网上看过。
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:05

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
通过异或运算符号可以进行变量的交换!这是我自己写的。
  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:17

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
wanghuailin1030 发表于 2013-6-9 20:25
这个有,我网上看过。
a=10,b=15,在不用第三方变量的前提下,把a,b的值互换
答:a=a+b;b=a-b;a=a-b;

不错,但还有更变态的!
回复 使用道具 举报
还有其他想法的吗?
谢谢参与!
回复 使用道具 举报
本帖最后由 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:57
回复 使用道具 举报
支持楼主发出这种经典题  可是我不会~

点评

慢慢来,多想想,思考的多了就会了。 要么说编程是一种艺术,就如数学一般,实现的思路有很多。  发表于 2013-6-10 00:01
回复 使用道具 举报
李奔 中级黑马 2013-6-10 00:02:34
8#
大家还有其他的方法吗?
我这里还有几种。
回复 使用道具 举报
陈行 高级黑马 2013-6-10 00:04:15
9#
楼主能不能讲下异或运算符怎么计算啊  我还没了解

点评

相同为0,不同为1. 你哪里不明白?  发表于 2013-6-10 00:07
回复 使用道具 举报
李奔 发表于 2013-6-10 00:02
大家还有其他的方法吗?
我这里还有几种。

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

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

谢谢大家的参与!
回复 使用道具 举报
李奔 发表于 2013-6-10 14:36
最后总结一下:
交换两个数值类型变量的值通常有四种方法:
1.借助中间变量

你试试交换两个string类型的变量,不用中间变量怎样进行:lol
回复 使用道具 举报
fcyan86 发表于 2013-6-10 15:12
你试试交换两个string类型的变量,不用中间变量怎样进行

String类型是引用类型,传递的是引用。
我还真不会,请赐教。
:lol
回复 使用道具 举报
李奔 发表于 2013-6-10 15:18
String类型是引用类型,传递的是引用。
我还真不会,请赐教。

我也不会,如果是c可以用指针,csharp不知道怎么干:lol
回复 使用道具 举报
异或。。。int a = 5, b = 10;
回复 使用道具 举报
异或~

int a = 5, b = 10;

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

位运算,最快的!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马