দুটি পূর্ণসংখ্যা k এবং n দেওয়া থাকলে, আমাদের কাজ হল n পরিসীমার মধ্যে থাকা সব সংখ্যা জোড়ার মধ্যে বিটওয়াইজ AND, OR এবং XOR অপারেশন সম্পাদন করা। তারপর k এর চেয়ে ছোট এই তিন অপারেশনের সর্বোচ্চ মানগুলো ফেরত দেওয়া।
উদাহরণ
ইনপুট: n = 5, k = 5 হলে আউটপুট হবে 4 3 4।
সর্বোচ্চ AND মান: 4, সর্বোচ্চ OR মান: 3, সর্বোচ্চ XOR মান: 4 — এবং এগুলো সবই 5-এর চেয়ে ছোট।
এলগরিদম
andMax = 0, orMax = 0, xorMax = 0ইনিশিয়ালাইজ করুন।- দুটি নেস্টেড লুপ চালিয়ে 1 থেকে
nপর্যন্ত সব অনন্য জোড়া(i, j)তৈরি করুন (j = i+1থেকে শুরু)। - প্রতিটি জোড়ার জন্য
value1 = i & j,value2 = i | j,value3 = i ^ jগণনা করুন। - যদি
value1 > andMaxএবংvalue1 < kহয়, তবেandMax = value1আপডেট করুন। - যদি
value2 > orMaxএবংvalue2 < kহয়, তবেorMax = value2আপডেট করুন। - যদি
value3 > xorMaxএবংvalue3 < kহয়, তবেxorMax = value3আপডেট করুন। - শেষে
andMax, orMax, xorMaxপ্রিন্ট করুন।
C কোড উদাহরণ
#include <stdio.h>
void solve(int n, int k) {
int andMax = 0, orMax = 0, xorMax = 0;
int value1, value2, value3;
for (int i = 1; i <= n; i++) {
for (int j = i + 1; j <= n; j++) {
value1 = i & j;
value2 = i | j;
value3 = i ^ j;
if (value1 > andMax && value1 < k) andMax = value1;
if (value2 > orMax && value2 < k) orMax = value2;
if (value3 > xorMax && value3 < k) xorMax = value3;
}
}
printf("%d %d %d", andMax, orMax, xorMax);
}
int main() {
solve(5, 5);
return 0;
}
ইনপুট ও আউটপুট
ইনপুট: 5, 5
আউটপুট: 4 3 4