2010-07-16 10 views
5

दो पूर्णांक चर हैं। क्या आप उन पूर्णांक चरों को किसी भी स्थिति का उपयोग किए बिना, बिना किसी कास्टिंग किए, और अतिरिक्त चर का उपयोग किए बिना स्वैप कर सकते हैं? उदाहरण के लिए:यदि आप शर्तों, कास्टिंग, या अतिरिक्त चर का उपयोग किए बिना किसी भी पूर्णांक चर के बिना दो पूर्णांक चर कैसे बदलते हैं?

int a = 10; 
int b = 5; 

a > b हमेशा। जवाब a == 5 और b == 10

+5

नहीं, मैं पता नहीं कैसे नीचे एक समस्या को धीमा करने के लिए है या इसे तेजी से जाना। – BoltClock

+0

एक होमवर्क असाइनमेंट प्रतीत होता है यदि ऐसा है तो आपको इसे –

+3

डुप्लिकेट के रूप में टैग करना चाहिए: http://stackoverflow.com/questions/804706/swap-two-variables-without-using-a-temp-variable – Naveen

उत्तर

13

आपको लगता है कि आप 3 चर का उपयोग नहीं द्वारा चालाक किया जा रहा है तो कुछ प्रदर्शन परीक्षण करते हैं और आप देखते हैं कि बहुत तेजी से जिस तरह से 3 int उपयोग करने के लिए चर अस्थायी रूप से स्टोर करने के लिए है।

फिर भी, मैं XOR बिटवाइज़ ऑपरेटर के साथ समस्या हल:

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

xor के साथ स्वैपिंग के बारे में अधिक जानकारी यहां है http://en.wikipedia.org/wiki/XOR_swap_algorithm – Willmore

+0

यह काम करने में विफल रहता है अगर ' = बी'। – Axoren

+0

आप किस भाषा का उपयोग कर रहे हैं? –

3

हाँ आप इसे प्लस/माइनस ऑपरेशन का उपयोग करके कर सकते हैं।

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

अतिप्रवाह और गोल करने वाली समस्याओं से बचने के लिए अतिरिक्त/घटाव का उपयोग करना बेहतर है। उस ने कहा, बस एक अस्थायी चर का उपयोग करना बेहतर है, लेकिन फिर भी। –

+0

गुणा/विभाजित काम नहीं करता है अगर num2 0 है। – pascal

+0

जानकारी के उत्तर के लिए धन्यवाद –

4

यह थोड़ा चाल है।

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; 

कोशिश करते हैं और बस इतना ही

संबंधित मुद्दे