top1编程
← 返回题目
题解

交换两个变量的值

1 条题解

  • 0
    @ 2026-8-3 18:39:20

    解题思路

    题目要求输入两个整数 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 就叫“中间变量”。

    对应的三条语句是:

    1. c = a;——先把 a 的值存进临时变量 c;
    2. a = b;——再把 b 的值赋给 a;
    3. 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