题目
从标准输入读入两个整数,分别演示(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