ধরুন আমাদের দুটি পূর্ণসংখ্যা 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