2010-07-16 5 views
5

İki tam sayı değişkeni var. Bu tamsayı değişkenlerini koşulsuz, döküm yapmadan ve ek değişken kullanmadan kullanabilir misiniz? Örneğin, her zaman:Koşullar, döküm veya ek değişkenler kullanılmadan iki tamsayı değişkenini nasıl kullanacaksınız?

a > b her zaman. Cevap a == 5 olmalı ve b == 10

+5

Hayır, nasıl bir sorun yavaşlatmak için hiçbir fikrim yok ya da daha hızlı gitmesini sağlayın. – BoltClock

+0

ev ödevi atama gibi görünüyorsa, bu durumda –

+3

olarak kopyalamanız gerekir. Duplicate: http://stackoverflow.com/questions/804706/swap-two-variables-without-using-a-temp-variable – Naveen

cevap

13

sonra bazı performans testleri yapmak ve çok daha hızlı bir yolu geçici olarak değişken saklamak için 3 int kullanmak olduğunu görüyoruz.

Neyse, ben XOR bitsel operatör ile sorunu çözdü:

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

xor ile değiştirme hakkında daha fazla bilgi için http://en.wikipedia.org/wiki/XOR_swap_algorithm – Willmore

+0

Bu, "a = = b – Axoren

+0

Hangi dili kullanıyorsunuz? –

3

evet artı/eksi operasyonu kullanarak bunu yapabilirsiniz.

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

Taşma ve yuvarlama sorunlarını önlemek için toplama/çıkarma işlemini kullanmak daha iyidir. Yani, sadece geçici bir değişken kullanmak daha iyidir, ama yine de. –

+0

Çarpma/bölme, num2 0 ise işe yaramaz. – pascal

+0

Şu anki güncelleştirmeler ve güncellemeler için teşekkürler –

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

Biraz hile. bu kadar

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 

! Eğer 3 değişken kullanmayarak zeki ediliyor düşünüyorsanız

3

basit bu

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

denemek ve bu kadar

İlgili konular