Swap Two Intergers Without Additional Mrmory

# 問題

一時変数を使わずに整数abを交換せよ.

# 答え

1
2
3
4
5
6
7
a = 10
b = 3
print(a, b) # => 10 3
a = a - b
b = a + b # (1)
a = b - a # (2)
print(a, b) # => 3, 10

abを交換前の数字とすると,

  • (1):(a - b) + b = a
  • (2):a - (a - b) = b

xorを使う方が汎用性は高そう.a xor a = 00 xor a = aという性質を利用する.

1
2
3
4
5
6
7
a = 10
b = 3
print(a, b) # => 10 3
a = a ^ b
b = a ^ b # (1)
a = a ^ b # (2)
print(a, b) # => 3, 10

abを交換前の数字とすると,

  • (1):(a xor b) xor b = a xor (b xor b) = a xor 0 = a
  • (2):(a xor b) xor a = b xor (a xor a) = b xor 0 = b
Hugo で構築されています。
テーマ StackJimmy によって設計されています。