ধরুন আমাদের দুটি পূর্ণসংখ্যা k এবং n দেওয়া হয়েছে। আমাদের কাজ তিনটি অপারেশন সঞ্চালন হয়; বিটওয়াইজ AND, bitwise OR, এবং bitwise XOR সব জোড়া সংখ্যার মধ্যে রেঞ্জ n পর্যন্ত। আমরা প্রদত্ত মানের k থেকে কম যেকোন দুই জোড়া সংখ্যার মধ্যে তিনটি ক্রিয়াকলাপের সর্বোচ্চ মান ফেরত দিই।
সুতরাং, ইনপুট যদি n =5, k =5 এর মত হয়, তাহলে আউটপুট হবে 4 3 4।
AND, OR, এবং XOR ক্রিয়াকলাপের সর্বশ্রেষ্ঠ মান হল 5 এর কম সংখ্যার সমস্ত জোড়ার মধ্যে যথাক্রমে 4, 3 এবং 4। আমরা দেখতে পাচ্ছি যে এই ক্রিয়াকলাপের মানগুলি প্রদত্ত মানের k থেকে কম, যা 5৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- andMax :=0, orMax =0, xorMax =0
- মান1 :=0, মান2 =0, মান3 =0
- আরম্ভ করার জন্য i :=1, যখন i <=n, আপডেট করুন (i 1 দ্বারা বাড়ান), করবেন:
- মান ১ :=i এবং j
- value2 :=i OR j
- value3 :=i XOR j
- যদি মান1> andMax এবং মান 1
- andMax :=value1
- যদি মান2> orMax এবং মান 2
- orMax :=value2
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
void solve(int n, int k) {
int andMax = 0, orMax = 0, xorMax = 0;
int value1 = 0, value2 = 0, value3 = 0;
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