交换两个数

10 分钟

交换两个变量的值,标准办法是借一个临时变量当中转,就像倒水要借一个空杯子:

int t = a;   // 空杯子接住 a
a = b;       // b 倒进 a
b = t;       // 空杯里的旧 a 倒进 b

顺序不能乱。如果少了第一步直接 a = b,a 原来的值就被 b 盖掉了,再也找不回来,最后两个都成了 b。

不用第三个变量行不行?可以,用加减:

a = a + b;   // a 里存了两数之和
b = a - b;   // 新 b = (a+b) - 旧b = 旧a
a = a - b;   // 新 a = (a+b) - 新b = 旧b

或者用异或 a ^= b; b ^= a; a ^= b;。但这两招都有坑:加减法当 a+b 超出 int 范围时会溢出出错;异或法看着酷,可读性差,还要求 ab 不是同一个变量。竞赛里没有特殊要求就老老实实用临时变量,清楚又不出错。

其实 C++ 标准库直接提供了 swap

swap(a, b);   // 需要 #include <algorithm> 或 <utility>

考试允许用库时,一行 swap(a, b) 最省事,还不容易写错顺序。

小纸条

不用第三个变量,能交换两个整数吗?

登录 后可看答案

交换两个数 · 考级冲刺 · op599 课程