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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许万里 中级黑马   /  2013-3-9 08:49  /  1664 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

怎么才可以 不借助第三方 变量来交换两个变量的值。?

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

9 个回复

倒序浏览
用^(异或)
假设有两个变量a,b (b^a^a=b)
a=a^b;(令a^b等于c)
b=a^b;(此时相当于b=(c^b-->a^b^b-->a) )
a=a^b;(a^a,但第一个a是a^b,相当于a^b^a-->b)-->a=b
以上完成交换.

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
如果是int类型的变量,可以通过计算重复赋值交换变量
int a =10;
int b=5;
a=a-b;//此时a=5;
b=a+b;//此时b=10;

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
算术运算法
a=10;
b=20;
a=a+b;(a=30)
b=a-b;(b=10)
a=a-b(a=20);

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
就是两个数相加 然后再分别减去
x=x+y;
y=x-y;
x=x-y;
如果没有特殊值 乘除 乘方开方 都ok的
x=x*y;
y=x/y;
x=x/y;
回复 使用道具 举报
不借助第三方 变量来交换两个变量:
int   n=3;m=8;
n=n^m;                               
m=n^m;//相当于(n^m)^m               
n=n^m;//相当于n^(n^m)               

n=n+m;//这种方式有局限性,如果两个数较大相加就超出int范围了,容易损失精度
m=n-m;
n=n-m

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
我的方法也是异或'^'
原理是:一个数'^'一个数两次还是原来的数。
如 int  x,y;
x=x^y;//(这个随便,用y也可以。但下边等号之前也要改)
y=x^y;//(因为之前设定x=x^y,这步就相当于y=x^y^y。x异或2个y,还是x。则y=x)
x=x^y;//(原理同上,之前设定y=x^y,这步的意思就是x=x^x^y。y异或了2个x,还是y。则x=y)

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
//定义两个int类型的变量如:a和b分别赋值为10和5,
        //不借助第三方变量写程序交换两个变量的值。
        static void Main(string[] args)
        {
            Console.WriteLine("开始a=10,b=5");
            int a = 10;
            int b = 5;
            a = a - b;//a=5,b=5
            b = a + b;//b=10,a=5;
            Console.WriteLine("交换后a={0},b={1}",a,b);
            Console.ReadKey();

        }
回复 使用道具 举报
宋健 中级黑马 2013-3-11 19:19:29
9#
数学算法:
           n1 = n1 - n2;
            n2 = n1 + n2;
            n1 = n2 - n1;
以上,请参考
回复 使用道具 举报
a=3,b=5;
a=a-b;//-2
b=a+b//3
a=b-a//5

纯粹的数学运算  到时候举个例子就出来了  不用死记得
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马