题目

从标准输入读入两个整数,分别演示(1)临时变量法、(2)异或运算法(或元组解包法)交换两数的值并输出。

输入格式:一行输入两个整数 a 和 b,以空格分隔。

输出格式:分别输出原值、临时变量交换后的值、异或交换后的值。

数据范围与约定:-109 ≤ a, b ≤ 109。

思路与算法

1. 临时变量法(通用标准)
借助第三个变量:t = a; a = b; b = t,直观清晰,适用于任何数据类型。

2. 异或位运算法
利用 x ^ x = 0 与 x ^ 0 = x 的数学性质,三次连续异或 a ^= b; b ^= a; a ^= b 可在不借助额外变量下实现交换。

3. Pythonic 习惯写法
在 Python 中最优雅的写法是元组解包 a, b = b, a,底层通过栈操作实现原子交换,既安全又高效。

完整程序

a, b = map(int, input().split())
print(f'原值: {a} {b}')

# 方式一:临时变量法(直观通用,无溢出风险)
t = a
a = b
b = t
print(f'临时变量交换后: {a} {b}')

# 方式二:异或运算法(利用 a ^ a = 0 与 a ^ 0 = a 性质)
a ^= b
b ^= a
a ^= b
print(f'异或交换后: {a} {b}')

运行示例

输入:

3 7

输出:

原值: 3 7
临时变量交换后: 7 3
异或交换后: 3 7

其它写法

下面每种写法都是完整程序,输入输出格式与正文一致,便于对照。

元组交换(Python 惯用)

只演示一种交换;与正文临时变量 + 异或对照阅读。

程序:

#!/usr/bin/python3
# coding=utf-8

a, b = map(int, input().split())
print(f"原值: {a} {b}")
a, b = b, a
print(f"元组交换后: {a} {b}")

输入:

3 7

输出:

原值: 3 7
元组交换后: 7 3