如何不用第三个变量实现两个数的交换

  一般我们在写程序时如果遇到两个数需要交换时写作如下:

1 int x,y;
2
3 int temp;
4
5 temp=x;x=y;y=temp;

  而如果不允许有第三个变量出现即不允许有temp出现时应该如何做呢?可以写作如下:

1 int x,y;
2
3 x=x+y;
4
5 y=x-y;
6
7 x=x-y;//上述一般可以满足,但是有时候x+y或许或出现上溢或者下溢。

  而利用两个数的异或或许更加巧妙——

异或有如下性质:

交换律:x^y=y^x

结合律:x^(y^z)=(x^y)^z

而相同的两个数异或则使得此数为0,故两个变量可以如下变换:

1 x=x^y;
2
3 y=x^y;//实际意思y=(x^y)^y;
4
5 x=x^y;//实际意思x=(x^y)^x;
时间: 2024-10-15 12:34:54

如何不用第三个变量实现两个数的交换的相关文章

如何不运用第三方变量实现两个数的交换

当遇到交换两个变量的时候,我们通常使用的是借助第三方变量实现两个数的交换.那么如果不使用第三方变量时,该怎么操作呢. 下面有两种方法: 1.通过已有的两个变量之间的加或减实现: 这种方法对于两个都是无限接进int取值范围,而相加超出int取值范围的情况不适用. 2.通过异或实现(异或符号为^) ******************************************************************************************************

如何在不介入第三个变量的情况下实现两个数的交换

如何在不介入第三个变量的情况下实现两个数的交换: 1 package myeclipseFiles2; 2 3 public class Operator { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 int a=6; 8 int b=1; 9 System.out.println(a+":"+b); 10 11 //方法一:不借助第三个变量完成两个数的交换 1

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

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

不借助第三个变量实现两个变量交换及原理分析

通常的交换两个变量a,b的过程为 var temp; temp=a; a=b; b=temp; 需借助上面的第3个临时变量temp. 无需借助第3个临时变量交换两个变量a,b d的方法: 逻辑运算(异或) 下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量: a = a ^ b; b = a ^ b; a = a ^ b; 这个交换两个变量而无需借助第3个临时变量过程,其实现主要是基于异或运算的如下性质: 1.任意一个变量X与其自身进行异或运算,结果为0,即X^X=0 2.任意一个变量

使用异或实现两个数的交换

实例:将数组的头尾两端依次对调(采用异或的方法实现两数的交换,不需要临时变量) #include <iostream> #define N 10 void swap(int *a, int *b) //交换a,b { *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; } void reverse_arry(int a[], int arry_len) //将数组的头尾两端互换 { int i = 0, j = arry_len-1; while(i <

利用函数调用实现两个数的交换

#include <stdio.h> #include<stdlib.h> void swap(int *pa, int *pb) { int tmp = *pa; *pa = *pb; *pb= tmp; } int main() { int n1 = 0; int n2 = 0; char *p1 = &n1; char *p2 = &n2; printf("请输入两个数:"); scanf_s("%d%d", &

两个数的交换

方法一:使用函数实现两个数的交换 #include<stdio.h> int fun(int *a,int *b) { int tmp; tmp=*a; *a=*b; *b=tmp; } int main() { int x,y; printf("please input two number:\n"); scanf("%d %d",&x,&y); printf("x=%d,y=%d\n",x,y); fun(&

交换两个变量以及不用第三个变量交换两个变量

这个可能网上一搜一大把一大把的,可是今天我看到了一个新的写法,所以就写这篇文章记录一下,不不知道百度有没有,没去搜索! 方法1:这是最简单,也是最常用的一个方法! int n1 = 10, n2 = 20; int tmp = n1; n1 = n2; n2 = tmp; Console.WriteLine("n1={0},n2={1}", n1, n2); Console.ReadKey(); 方法2:算术运算 //交换两个变量,不使用第三个变量 int n1 = 10, n2 =

不借助第三个变量实现两个变量交换的思考

1) 算术运算简单来说,就是通过+和-运算来实现.代码如下: int a,b; a=10;b=12; a=b-a;   //a=2;b=12 b=b-a;   //a=2;b=10 a=b+a;   //a=12;b=10 通过以上运算,a和b中的值就进行了交换.表面上看起来很简单,但是不容易想到,尤其是在习惯标准算法之后. 此算法与标准算法相比,多了三个计算的过程,但是没有借助临时变量.(以下称为算术算法) 2) 指针操作对指针的操作实际上进行的是整数运算.比如:两个int指针相减得到一个整数