作者tokyobabylon (paris)
看板C_and_CPP
標題[問題] 關於swap()
時間Tue Nov 3 19:03:10 2009
剛剛碰到一個swap問題
題目是int a=4 ,int b=3;
要把值互換成int a=3, int b=4;
但是不可以使用temporary variable
我尚未compile過 但是我寫這樣似乎是錯的...
不知道哪裡錯了
int main()
{
int a=3,b=4;
int *ptr1=&a, *ptr2=&b;
swap(ptr1,ptr2);
cout<<a<<b;
return 0;
}
int swap(int *i,int *j)
{
i=j;
j=i+1; //我知道這有點牽強...但還是錯了的樣子@@"
return;
}
還是要改成...
*i=*j;
*j=*i+1;
這樣不知道行不行?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.49.87
1F:推 VictorTom:為什麼是+1?? 還有你知道i/j有*跟沒*各自在做什麼嗎?? 11/03 19:06
2F:→ VictorTom:剛才仔細看到不能用temp換, 那給你的提示, XOR可以試試. 11/03 19:08
3F:推 QQ29:swap a,b=> a=a+b; b=a-b;a=a-b; 11/03 19:31
4F:→ mantour:*x=*x-*y ; *y=*x+*y ; *x=*y-*x; 11/03 19:34
5F:→ mantour:或 *x^=*y ; *y^=*x ; *x^=*y ; 11/03 19:34
6F:→ mantour:前提是 x != y 11/03 19:34
7F:推 mantour:你的寫法的問題在於如果a,b不是3和4不就掛了? 11/03 19:37
8F:推 raincole:*a ^= *b ^= *a ^= *b; 11/03 19:39
9F:→ walm20:我笑了... 11/04 01:46
10F:推 jimmylin212:轉二進位 用xor做三次 11/04 18:59
11F:→ jimmylin212:x = x XOR y; y = x XOR y; x = XOR y; 11/04 19:00
12F:推 VictorTom: 轉二進位這個說法是沒有必要的:) 11/04 19:44
13F:推 jimmylin212:喔喔 不用轉直接xor 也可!!! 11/04 20:42
14F:推 VictorTom:如果您在考慮"要不要轉"二進位這件事, 就表示您對變數儲 11/04 20:45
15F:→ VictorTom:存資料的運作與結果並不是很了解; 舉一個簡單的例子, 請 11/04 20:46
16F:→ VictorTom:問用一個int存一個二/八/十/十六進位的數, 需不需要轉換 11/04 20:47
17F:→ VictorTom::) 11/04 20:47
18F:→ VictorTom:也可以換個問題, 一個char存'A', 存65, 存0x41, 又需不 11/04 20:49
19F:→ VictorTom:要做什麼轉換:) 11/04 20:49
20F:→ loveme00835:傳三個參數進去就好了啊 11/06 14:02