คำชี้แจงปัญหา
เราต้องกำหนดค่าตัวแปรอื่น ๆ ให้กับตัวแปรจากสองค่าที่เป็นไปได้โดยไม่ต้องใช้ตัวดำเนินการตามเงื่อนไข
คำอธิบาย
ในปัญหานี้ เราได้รับตัวแปรหนึ่ง สมมุติว่า a มีค่าของตัวแปร x และ y สองตัวใดก็ได้ ตอนนี้ เราต้องสร้างโปรแกรมเพื่อกำหนดค่าของอย่างอื่นที่ไม่ใช่ค่าปัจจุบันโดยไม่ต้องใช้ตัวดำเนินการตามเงื่อนไขใดๆ นั่นคือเราไม่สามารถตรวจสอบค่าของ x ได้
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากันดีกว่า −
Input : a = 43 ; x = 43 and y = 21 Output : 21
คำอธิบาย − ค่าเริ่มต้นของ a คือ 43 ดังนั้นเราต้องคืนค่าอีกค่าหนึ่ง นั่นคือ 21 เป็นค่าสุดท้ายของ a
เนื่องจากเราไม่ได้รับอนุญาตให้ตรวจสอบค่าของ i.e. การใช้คำสั่งแบบมีเงื่อนไขใดๆ จึงไม่ถูกต้องในโค้ด ดังนั้น เราต้องดูวิธีแก้ปัญหาอื่นสำหรับค่า swap ของตัวแปร สำหรับสิ่งนี้ อาจมีหลายวิธีแก้ปัญหา แต่เรากำลังพูดถึงความเป็นไปได้และง่ายที่สุดที่นี่ -
การใช้ตัวดำเนินการทางคณิตศาสตร์
วิธีง่ายๆ วิธีหนึ่งในการสลับค่าคือการใช้การบวก/การคูณของสองค่าและการลบ/หารสำหรับการดำเนินการที่ตรงกันข้ามตามลำดับ เช่น การลบ หากเราได้บวกและหารแล้วหากใช้การคูณ
ดังนั้นสูตรจะกลายเป็น −
a =x + y - a หรือ a =x * y / a
แต่ในที่นี้ การดำเนินการคูณและหารมีค่าใช้จ่ายมากกว่า และบางครั้งอาจทำให้เกิดข้อผิดพลาดได้ ดังนั้นเราจึงใช้การบวก - การลบสำหรับสิ่งนี้
ตัวอย่าง
#include <iostream> using namespace std; int main(){ int x = 45; int y = 5; int a = x; cout<<"Initial value of a is : "<<a; a = x+y - a; cout<<"\nAfter changing the value of a is : "<<a; }
ผลลัพธ์
Initial value of a is : 45 After changing the value of a is : 5
การใช้ตัวดำเนินการ XOR ระดับบิต
วิธีที่มีประสิทธิภาพมากขึ้นคือการใช้ตัวดำเนินการ XOR ระดับบิต
ดังนั้นค่าจะถูกเปลี่ยนในลักษณะดังต่อไปนี้ −
a =x^y^a;
ตัวอย่าง
#include <iostream> using namespace std; int main(){ int x = 56; int y = 78; int a = x; cout<<"Initial value of a is : "<< a; a = x^y^a; cout<<"\nAfter changing the value of a is "<<a; return 0; }
ผลลัพธ์
Initial value of a is : 56 After changing the value of a is 78