题解
交换两个变量的值
1 条题解
-
0
解题思路
题目要求输入两个整数
a和b,交换它们的值,再输出。比如输入1 2,输出2 1。先想一想:直接写
a = b; b = a;行不行?不行! 因为执行完a = b;之后,a原来的值已经被b的值覆盖掉了,等到执行b = a;时,拿到的是已经变成b的值,原来a的值早就丢了。打个比方:a 杯子里装橙汁,b 杯子里装可乐,现在要把两个杯子的饮料互换。你只有两只手,必须先拿一个空杯子 c,把 a 的橙汁倒进 c 里,再把 b 的可乐倒进 a 里,最后把 c 里的橙汁倒进 b 里。这个空杯子 c 就叫“中间变量”。
对应的三条语句是:
c = a;——先把 a 的值存进临时变量 c;a = b;——再把 b 的值赋给 a;b = c;——最后把 c 里存的(原来的 a 的值)赋给 b。
这样一来,a、b 的值就互换完成了。最后用空格隔开输出
a和b。题目保证输入范围在 0 到 1000 之间,用int就够。参考代码
#include <iostream> using namespace std; int main() { int a, b; // a、b:要交换的两个整数 cin >> a >> b; // 读入两个整数 int c; // c:交换用的临时变量(就像那个空杯子) c = a; // 第一步:把a的值存到临时变量c里 a = b; // 第二步:把b的值赋给a b = c; // 第三步:把c里原来a的值赋给b // 按空格隔开输出交换后的结果 cout << a << " " << b << endl; return 0; }复杂度分析
不管 a、b 的值是多大,交换只需要固定的三步赋值操作,所以时间复杂度是 O(1)。
空间上除了 a、b 本身,只多用一个临时变量 c,占用的空间固定,空间复杂度是 O(1)。
思考一下:如果不用临时变量,还能怎么交换?(提示:可以用加减法,
a=a+b; b=a-b; a=a-b;,但中途 a 可能超过 int 范围,所以更推荐用临时变量。)
- 1