chỉ áp dụng cho số nguyên.Code:C1: #define SWAP(a, b) (a ^= b ^= a ^= b) C2: void SWAP(short a, short b) { a += b; b = a - b; a -= b; }
Mình có một bài tập sắp xếp mảng tăng dần. Nhưng đề yêu cầu bắt buộc xây dựng hàm hoán vị 2 số nhưng không sử dụng biến thứ 3.
Nó là con của thằng nào ? Con của thằng nào ? Nói mau!!!!!!!!!!!!!!!
chỉ áp dụng cho số nguyên.Code:C1: #define SWAP(a, b) (a ^= b ^= a ^= b) C2: void SWAP(short a, short b) { a += b; b = a - b; a -= b; }
cách 2 thiếu tham chiếu
CCó thể dùng :
C Code:
void swap(int &a,int &b) { a = a ^ b;//a = a xor b b = a ^ b;//b = a xor b a = a ^ b;//a = a xor b }
Trong python thì
Code:a,b = b,a
Nghe Metal và dịch thơ
lttqstudy.wordpress.com
um, hơi sơ suất tí chút.
thực ra cách 1 hay cách 2 đều có thể quy về một cách hết
f là hàm nào đấy (2 biến) có hàm "đối" là g. ( "đối" mang tính chất cảm tính)
quy tắc chung:
C1: f là phép xor, g cũng là phép xor
C2: f là phép +, g là phép -
có thể mở rộng thêm một phương án nữa
a*=b
b=a/b
a=a/b
f là nhân, g là chia.
đây là một cách nữa:
x = x mũ y
y = căn bậc y của x
x = loga cơ số y của x
trời ui, nhiều lắm.
ủe-defined là thế nào, đề đã bảo là 2 số nguyên mà.
uhm cái này chỉ áp dụng swap 2 số nguyên, mình test thử swap các kiểu dữ liệu khác đều không được, nhưng mà bản chất thì chỉ là 3 phép toán xor theo bít thôi mà, có vấn đề gì đó.
Cảm ơn mấy bác nhiều!!! Nhưng nếu cách cộng, nhân, mũ thì với những số nguyên lớn sẽ không đúng thì phải?
Nó là con của thằng nào ? Con của thằng nào ? Nói mau!!!!!!!!!!!!!!!
Các kiểu dữ liệu khác (ví dụ số thực) cũng được chứ bạn. Vấn đề là phải ép kiểu vì float/double không có phép toán xor (^)
C Code:
#define CAST(type, pvar) (*(type*)(pvar)) void swapd(double *x, double *y) { CAST(long long, x) ^= CAST(long long, y); CAST(long long, y) = CAST(long long, x) ^ CAST(long long, y); CAST(long long, x) ^= CAST(long long, y); } void swapf(float *x, float *y) { CAST(long, x) ^= CAST(long, y); CAST(long, y) = CAST(long, x) ^ CAST(long, y); CAST(long, x) ^= CAST(long, y); }
Note: Trong đại đa số các compiler thì long long là 8 bytes, nhưng không chắc chắn luôn là 8 byte với mọi compiler đâu nhé!!