一般交换两个变量的值的时候,我们会引入中间变量,代码如下:
int main(){
int a = 5, b = 3;
int tmp;
tmp = b;
b = a;
a = tmp;
printf("-----------After changing----------------\n");
printf("a = %d, b = %d \n", a, b);
}
在面试的时候遇到过这样的问题:如何交换两个变量的值,而不引入中间变量?当时就一脸懵逼了,脑子一时转不过来。现在来写写自己网上找到的几种方法吧!
1、加减运算法:
int main(){
int a=5,b=3;
a = a+b;
b = a-b;
a = a-b;
printf("-------------After changing-------------\n");
printf("a = %d, b = %d \n", a, b);
return 0;
}
解释:两数相加,减一数,得另一数。
2、位运算——异或法
int main(){
int a = 5, b = 3;
a = a^b;
b = a^b;
a = a^b;
printf("-----------After changing----------------\n");
printf("a = %d, b = %d \n", a, b);
}
解释:异或两次相同的数,其值不变。
3、堆的实现,利用堆的 后进先入 性质。由于还没复习到,以后再贴代码。