交換函式
注意:雖然不用第三方變數的寫法感覺很牛,但是在複雜的程式環境中容易出現bug(下面會舉例bug)並且技巧性越強的**bug越不好找;因此只需掌握不用第三個變數的思路,平時最好用第三個變數來交換兩個數字
1.常用,最好理解:用第三方變數協助交換(相當於一瓶可樂,一瓶雪碧交換,用乙個空瓶子實現)
void swap(int *p1 , int *p2)
int main()
2.不用第三方變數(重在思路)
2.1 加減交換
a =10 ; b=20
b=a+b 10 30
a=b-a2030
b=b-a20 10
void swap(int *p1 , int *p2)
同理: b = b - a;
a = a + b;
b = a - b;
也可以2.2 異或交換
int a =10 ; b=20 (int4個位元組中前三個全為0,省略)
0000 1010 (10) 0001 0100(20)
a=a^b 0001 1110 (30) 0001 0100(20)
b=b^a 0001 1110 (30)0000 1010(10)
a+a^b0001 0100(20) 0000 1010(10)
void swap(int *p1 , int *p2)
void
reverse
(int
*arr,
int len)
//陣列逆置
}void
show
(int
*arr,
int len)
//列印
printf
("\n");
}int
main()\
; 偶數沒問題
int arr=
;// 奇數,結果出錯
reverse
(arr,
sizeof
(arr)
/sizeof
(arr[0]
));show
(arr,
sizeof
(arr)
/sizeof
(arr[0]
));return0;
}
發現結果出錯位子在 陣列中間,即 i 和 j 相等時
除錯:
當 i 和 j 相等,執行swap第乙個語句時,本應 * p2變為 * p2+ * p1;* p1 不變,但除錯發現 * p1也變為了 * p2+ * p1;再執行swap剩餘語句後,arr[1]=0;
將**中 i<=j 改為 i
php不用第三個變數,交換兩個數的值
字串版本 結合使用substr,strlen兩個方法實現 a a b b echo 交換前 a a.b b.a.b b substr a,0,strlen a strlen b a substr a,strlen b echo 交換後 a a.b b.echo 字串版本 使用str replace方...
如何不用第三個變數實現兩個數的交換
一般我們在寫程式時如果遇到兩個數需要交換時寫作如下 1 intx,y 23 inttemp 45 temp x x y y temp 而如果不允許有第三個變數出現即不允許有temp出現時應該如何做呢?可以寫作如下 1 intx,y 23 x x y 45 y x y 67 x x y 上述一般可以滿...
不用第三個變數進行交換兩數
include include using namespace std int main d c d c d c d d c cout c c d da a b b a b a a b cout a a b ba 3 b 2 c 3 d 2 a 2 b 3 press any key to cont...