কম্পিউটার

ফ্লিপ করার জন্য সর্বনিম্ন বিট গণনা করুন যাতে C++ এ A এবং B এর XOR সমান C এর সমান


আমাদের N দৈর্ঘ্যের তিনটি বাইনারি সিকোয়েন্স A, B এবং C দেওয়া হয়েছে। প্রতিটি সিকোয়েন্স অ্যাবাইনারি সংখ্যার প্রতিনিধিত্ব করে। আমাদের নেই খুঁজে বের করতে হবে। A এবং B-এ বিটগুলির জন্য প্রয়োজনীয় ফ্লিপগুলি যাতে A এবং B-এর XOR C-তে পরিণত হয়। A XOR B C হয়ে যায়।

প্রথমে আসুন XOR অপারেশন -

-এর সত্য সারণী সম্পর্কে জেনে নিই
X Y X XOR Y
0 0 0
0 1 1
1 0 1
1 1 0

উপরের সারণী থেকে আমরা লক্ষ্য করি যে X এবং Y-তে একই মানগুলির জন্য, X XOR Y ফলাফল 0 অন্যথায় ফলাফল 1। সুতরাং এটি C-তে পৌঁছানোর জন্য A এবং B তে ফ্লিপ করা বিটগুলি খুঁজে পেতে সহায়ক হবে। কেসগুলি হবে

  • যদি A[i]==B[i] এবং C[i]==0 তাহলে ফ্লিপ না হয়,
  • যদি A[i]==B[i] এবং C[i]==1 তাহলে A[i] বা B[i] ফ্লিপ করুন এবং ফ্লিপ কাউন্ট 1 দ্বারা বাড়ান
  • যদি A[i]!=B[i] এবং C[i]==0 তাহলে A[i] বা B[i] ফ্লিপ করুন এবং ফ্লিপ কাউন্ট 1 বাড়িয়ে দিন
  • যদি A[i]!=B[i] এবং C[i]==1 তাহলে ফ্লিপের প্রয়োজন নেই।

ইনপুট

A[]={ 0,0,0,0 } B[]={ 1,0,1,0 } C={1,1,1,1}

আউটপুট

প্রয়োজনীয় flips :2

ব্যাখ্যা

A[0] xor B[0] 0 xor 1 =1 C[0]=1 no flipA[1] xor B[1] 0 xor 0 =0 C[0]=1 ফ্লিপ কাউন্ট=1A[2 ] xor B[2] 0 xor 1 =1 C[0]=1 no flipA[3] xor B[3] 0 xor 0 =0 C[0]=1 flip count=2

ইনপুট

A[]={ 0,0,1,1 } B[]={ 0,0,1,1 } C={0,0,1,1}

আউটপুট

প্রয়োজনীয় flips :2

ব্যাখ্যা

A[0] xor B[0] 0 xor 0 =0 C[0]=0 no flipA[1] xor B[1] 0 xor 0 =0 C[0]=0 no flipA[2] xor B[2] 1 xor 1 =0 C[0]=1 ফ্লিপ কাউন্ট=1A[3] xor B[3] 1 xor 1 =0 C[0]=1 ফ্লিপ কাউন্ট=2 

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • অ্যারে a[], b[] এবং c[] ব্যবহার করা হয় বাইনারি সংখ্যা সংরক্ষণ করতে।

  • ফাংশন flipCount(int A[], int B[], int C[], int n) অ্যারে a, b, c এবং তাদের দৈর্ঘ্য n এ ইনপুট নেয় এবং A[] বা B[এর বিটে প্রয়োজনীয় ফ্লিপের গণনা প্রদান করে। ] A xorB

    হিসাবে C[] পেতে
  • পরিবর্তনশীল গণনা ফ্লিপ গণনা প্রতিনিধিত্ব করে এবং 0 দিয়ে আরম্ভ করা হয়।

  • i =0 থেকে i

    ঘরে প্রতিটি বিটকে লুপ ট্রাভার্সের জন্য ব্যবহার করা হচ্ছে
  • প্রতিটি বিটের জন্য A[i] এবং B[i]। যদি তারা সমান হয় এবং C[i] হয় 1 বৃদ্ধির সংখ্যা।

  • প্রতিটি বিটের জন্য A[i] এবং B[i]। যদি তারা সমান না হয় এবং C[i] হয় 0 বৃদ্ধির সংখ্যা।

  • পছন্দসই ফলাফল হিসাবে গণনা ফেরত দিন।

উদাহরণ

#includeনেমস্পেস ব্যবহার করে std;int flipCount(int A[], int B[], int C[], int N){ int count =0; (int i=0; i  

আউটপুট

 ফ্লিপ করার জন্য ন্যূনতম বিট যাতে A এবং B এর XOR C :2 এর সমান হয়

  1. সবচেয়ে ছোট সংখ্যা K খুঁজুন যেমন K % p =0 এবং q % K =0 C++ এ

  2. ন্যূনতম x খুঁজুন যেমন (x % k) * (x / k) ==n C++ এ

  3. x এর সমষ্টি এবং এর সংখ্যা C++ এ দেওয়া n-এর সমান

  4. দুটি বাইনারি অ্যারেতে ন্যূনতম ফ্লিপ যাতে তাদের XOR C++ এ অন্য অ্যারের সমান হয়।