2010-07-16 17 views
5

Có hai biến số nguyên. Bạn có thể trao đổi các biến số nguyên đó mà không sử dụng bất kỳ điều kiện nào nếu không có phép đúc và không sử dụng các biến bổ sung không? Ví dụ:Làm thế nào để bạn trao đổi hai biến số nguyên mà không sử dụng bất kỳ điều kiện, đúc hoặc biến bổ sung nào?

int a = 10; 
int b = 5; 

a > b luôn. Câu trả lời phải là a == 5b == 10

+5

Không, tôi không có ý tưởng làm thế nào để làm chậm một vấn đề hoặc làm cho nó đi nhanh hơn. – BoltClock

+0

dường như là một bài tập về nhà nếu đó là trường hợp bạn nên gắn thẻ nó như vậy –

+3

Nhân bản: http://stackoverflow.com/questions/804706/swap-two-variables-without-using-a-temp-variable – Naveen

Trả lời

13

Nếu bạn cho rằng mình đang thông minh bằng cách không sử dụng biến số 3 thì thực hiện một số kiểm tra hiệu suất và bạn thấy cách nhanh hơn nhiều là sử dụng số int.

Anyways, tôi giải quyết vấn đề với nhà điều hành XOR Bitwise:

a ^= b; 
b ^= a; 
a ^= b; 
+0

Thông tin thêm về hoán đổi với xor ở đây http://en.wikipedia.org/wiki/XOR_swap_algorithm – Willmore

+0

Điều này không hoạt động nếu 'a = = b'. – Axoren

+0

Bạn đang sử dụng ngôn ngữ nào? –

3

có bạn có thể thực hiện bằng cách sử dụng thao tác cộng/trừ.

Example: 
num1 = num1 + num2;     
num2 = num1 - num2;     
num1 = num1 - num2; 
+0

Tốt hơn để sử dụng phép cộng/trừ để tránh các sự cố tràn và làm tròn. Điều đó nói rằng, tốt hơn là chỉ cần sử dụng một biến tạm thời, nhưng vẫn còn. –

+0

Nhân/Chia không hoạt động nếu num2 là 0. – pascal

+0

cảm ơn thông tin đã cập nhật bây giờ –

10
a=a+b; 
b=a-b; 
a=a-b; 
4

Đó là một mẹo nhỏ.

int a = 5; 
int b= 10; 
a = a+b; 
b = a-b; /* Really (a+b) - b i.e. a */ 
a = a-b; /* Really (a+b) - a i.e. b */ 
3
a=a+b 
b=a-b 
a=a-b 

Vậy là xong!

3

đơn giản thử này

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

và đó là nó

Các vấn đề liên quan