交换两个数
约 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 范围时会溢出出错;异或法看着酷,可读性差,还要求 a、b 不是同一个变量。竞赛里没有特殊要求就老老实实用临时变量,清楚又不出错。
其实 C++ 标准库直接提供了 swap:
swap(a, b); // 需要 #include <algorithm> 或 <utility>
考试允许用库时,一行 swap(a, b) 最省事,还不容易写错顺序。
小纸条
不用第三个变量,能交换两个整数吗?
登录 后可看答案