交換兩個數

假設須要交換的兩個數爲 a, bcode

使用中間變量

-------------
| a | b | t |
-------------

使用一箇中間變量來作媒介來交換,設中間變量爲t;則經過 a -> t; b -> a; t -> b 完成了交換,代碼以下內存

var t = a;
a = b;
b = t;

不使用中間變量

a = a + b;
b = a - b;
a = a - b;

初看起來可能比較迷糊,下面分析一下,假設內存結構以下class

a1    a2
---------
| a | b |
---------
  1. 先把兩個的和保存進a所在的位置 a + b -> a1,狀態改變以下變量

    a1        a2
    -------------
    | a + b | b |
    -------------
  2. 如今a1位置已經爲a+b了,減去一個b便變成了a,而後放在a2位置,如今狀態以下co

    a1        a2
    -------------
    | a + b | a |
    -------------
  3. 最後用a1所在位置的數減去a2所在位置的數也即 a + b - a = b,放進a1,完成交換

    a1    a2
    ---------
    | b | a |
    ---------

其實就是把兩數先累加放在其中一個位置,再用這個位置的數減去兩次另外一個位置的數

相關文章
相關標籤/搜索