সমস্যা বিবরণ
আমাদের একটি ভেরিয়েবলকে দুটি সম্ভাব্য মান থেকে অন্য মান অ্যাসাইন করতে হবে কোনো কন্ডিশনাল অপারেটর ব্যবহার ছাড়া।
ব্যাখ্যা
এই সমস্যাতিতে আমাদের একটি ভেরিয়েবল দেওয়া আছে, ধরুন a, যেটির মান যেকোনো দুটি ভেরিয়েবল x এবং y-এর যেকোনো একটি হতে পারে। এখন আমাদের একটি প্রোগ্রাম তৈরি করতে হবে যাতে a-র বর্তমান মানের পরিবর্তে অন্য মান অ্যাসাইন করা যায় কোনো কন্ডিশনাল অপারেটর ব্যবহার ছাড়া। অর্থাৎ আমরা a-এর মান চেক করতে পারব না।
উদাহরণ:
Input : a = 43 ; x = 43 and y = 21 Output : 21
ব্যাখ্যা − a-এর প্রাথমিক মান ৪৩ তাই অন্য মানটি অর্থাৎ ২১ রিটার্ন করতে হবে a-এর চূড়ান্ত মানের হিসেবে।
যেহেতু আমরা a-এর মান চেক করতে পারি না (কোনো কন্ডিশনাল স্টেটমেন্ট ব্যবহার করতে পারি না), তাই আমাদের ভেরিয়েবলের মান বদলানোর বিকল্প সমাধান খুঁজে বের করতে হবে। এর জন্য একাধিক সমাধান থাকতে পারে কিন্তু এখানে সবচেয়ে সহজ এবং কার্যকর দুটি পদ্ধতি আলোচনা করা হলো:
অ্যারিথমেটিক অপারেটর ব্যবহার করে
মান বদলানোর সহজ একটি পদ্ধতি হল দুটি মানের যোগফল/গুণফল ব্যবহার করে এবং তারপর বিয়োগ/ভাগ করে বিপরীত অপারেশন করা। অর্থাৎ যোগ করলে বিয়োগ এবং গুণ করলে ভাগ।
সূত্র হয়ে যায়:
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;
return 0;
}
আউটপুট
Initial value of a is : 45 After changing the value of a is : 5
বিটওয়াইজ XOR অপারেটর ব্যবহার করে
একটি আরও কার্যকর পদ্ধতি হতে পারে বিটওয়াইজ XOR অপারেটর ব্যবহার করা।
মানটি নিচের şekilde পরিবর্তন করা যাবে:
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