🕒 2014/07/16
🔄 2023/04/22
新しい変数を使わずに、2つの変数を入れ替える方法
Category:
雑記
最近、CodeIQやpaizaでいろいろ問題を解いています。
で、そこで、前にこういう問題が出ていたんですよね。表現は変えていますが、内容は同じです。
【問題】 一般的に、変数aとbの値を入れ替えるときは、次のようにします。 c = a; // 一時的にaをcに入れておく a = b; // aがbの値になる b = c; // bにaの値が入る 上の例では、変数の交換のために新しい変数cを使っています。 このような新しい変数を使わずに、変数を交換することはできるでしょうか。
実は、前に書いた「[javascript] 配列をうまく受け取る方法」の中で、javascriptの場合の答えを書いているんですよね。
[a, b] = [b, a];
ただ、これは一般的な言語では使えないんですよね。で、僕が考えた方法を載せておきます。ちなみに、解答期限は過ぎています。
これも言語によっては使えない気もしますが。
一応、簡単に解説も書きます。まず、一番初めに処理されるのは、「b-a」の部分ですね。つぎに、その後の「+」を処理しようとしますが、その前に「(b=a)」が実行されます。これでbにaの値が入ります。この結果、右辺は「b-a+a」ということになります。つまり、元のbの値になるわけですね。これがaに入ると。
これにより、aとbの値が交換されるわけですね。ひらめくと気持ちいいですが、あんまり実用性はない気がします。。。