不用第三变量交换数值

最近碰到一个面试题是关于变量替换,a= 2,b=5,替换之后b=2,a=5;当时觉得应该是利用编译器的临时变量来搞定,其实不然,结果就是我没做出来,尤其人家的标题写的“初级”,瞬间觉的自己能力不行啊。

回来之后才想起来这个是C语言时候交过的:

1 int a = 2,b=5;
2     a = b + a;
3     b = a - b;
4     a = a - b; 

是不是很简单呢,郁闷,当时怎么没想到呢,这几天邪门的很啊。

如果只是上面的那也就不说了,主要是想总结下这种满足交互原则的方法,貌似只要满足交换律似乎就能搞定这个问题啊。

看下一种:

1 int a = 2,b=5;
2     /*a = b + a;
3     b = a - b;
4     a = a - b; */
5     a = a * b;
6     b = a / b;
7     a = a / b ;

也可以实现呢。

网上貌似也有人这样搞,利用a^b^b == a,异或运算满足交换律,二进制运算的神奇哥哥理解不了:

 1     int a = 2,b=5;
 2     /*a = b + a;
 3     b = a - b;
 4     a = a - b; */
 5     /*a = a * b;
 6     b = a / b;
 7     a = a / b ;*/
 8     a = a ^ b;
 9     b = a ^ b;
10     a = a ^ b;

唉,终究是太无知了,难怪等不到录取通知。。。。。。

原文地址:https://www.cnblogs.com/WaterGood/p/9090794.html

时间: 2024-10-10 20:18:41

不用第三变量交换数值的相关文章

PHP不用第三变量交换2个变量的值的解决方法

以前做过一道php面试题是这样的:不使用第三个变量实现交换两个变量的值.一般都是借助第三个中间变量来实现原来两个变量的值交换,但是这道题却要求不能使用中间变量,这对于初学者来说也算是一个难题了.网上找到的几种方法总结如下: 复制代码 代码如下: //字符串版本 结合使用substr,strlen两个方法实现 $a="a";$b="b";echo '交换前 $a:'.$a.',$b:'.$b.'<br />';$a.=$b;$b=substr($a,0,(

[算法]不用第三个数交换2个数的位置

int a = 10; int b = 20; 第一种方法: a = a + b; b = a - b; a = a - b; 第二种方法: a = a ^ b; (^   语言中是异或的意思,同为0 异为1  1 ^ 1 = 0, 0 ^ 0 = 0, 1 ^ 0 = 1) b = a ^ b; a = a ^ b; 第三种方法  (这种方法容易越界)如果a 大于int型最大值了! a = (a + b) - (b = a);

两个数值变量交换数值的几种方式

1.定义第三方变量 2.用位异或实现(一个数位异或另一个数两次,还得那一个数) 3.用变量相加的做法 4.一步搞定 原文地址:https://www.cnblogs.com/lzpsir/p/12200372.html

C#之不借助第三变量交换两变量值

源码: int n1=10, n2=20; n1 = n1 - n2;   // -10 n2 = n1 + n2;  //  10 n1 = n2 - n1;  //   20

两个变量交换的四种方法

对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. class TestEV //创建一个类 { public static void main(String[]args) { int x =5,y=10; //定义两个变量 int temp = x; //定义第三临时变量temp并提取x值 x = y; //把y的值赋给x y = temp; //然后把临时变量temp值赋给y System.out.println("x="+x

两个变量交换的四种方法(Java)

对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) class TestEV//创建一个类{ public static void main(String[]args) { int x =5,y=10; //定义两个变量 int temp = x; //定义第三临时变量temp并提取x值 x = y; //把y的值赋给x y = temp; //然后把临时变量temp值赋给y System.out.println("x=&

两个变量交换的四种方法(Java) 七种方法(JS)

对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) 1 class TestEV 2 //创建一个类 3 { 4 public static void main(String[]args) 5 { 6 int x =5,y=10; //定义两个变量 7 8 int temp = x; //定义第三临时变量temp并提取x值 9 x = y; //把y的值赋给x 10 y = temp; //然后把临时变量temp值赋给y

PHP中不用第三个变量交换两个变量的值

相信大家在PHP面试或者学习中经常会遇到这个问题就是“不用第三个变量来交换两个变量的值”,今天正对这个问题来讨论一下: 第一种方法:首先会想到的 这种方法简单可行,顺利的交换了两个变量的值. 第二种方法呢,稍加思考我们就会用到PHP中的函数来实现 第三种方法呢,我们来采用PHP中提供各种字符串分割函数来实现. 简单的题目不同的思想就会有不同的解法,期待更多的答案.

Java 交换两个变量的数值

一.参数传递方法 为解决标题问题,首先介绍参数传递方法.目前各类程序设计语言的参数传递方法主要有三种: 按值传递 按引用传递 按指针传递 其中按值传递表示方法(函数)接收的是调用者提供的变量的拷贝,不改变参数的值:按引用传递表示方法(函数)接收的调用者提供的变量地址:按指针传递表示方法(函数)接收的是调用者提供的指针的拷贝,不改变指针的值和地址,但可以改变指针所指向的地址. 二.Java参数传递方法 Java提供的参数传递方法,很遗憾只有一种,按值传递.也就是说,方法得到的是所有参数值的一个拷贝