Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พลิกขั้นต่ำเพื่อสร้าง OR b เท่ากับ c ใน C++


สมมติว่าเรามีตัวเลขบวก 3 ตัว a, b และ c เราต้องหาการพลิกขั้นต่ำที่จำเป็นในบางบิตของ a และ b เพื่อสร้าง (a OR b ==c ) เรากำลังพิจารณาการดำเนินการระดับบิต OR

การดำเนินการพลิกประกอบด้วยการเปลี่ยนแปลงบิตเดียว 1 ถึง 0 หรือเปลี่ยนบิต 0 เป็น 1 ในการแทนค่าไบนารี ดังนั้นถ้า a :0010 และ b :=0110 ดังนั้น c คือ 0101 หลังจากพลิก a จะเป็น 0001 และ b จะเป็น 0100

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ตอบ :=0
  • สำหรับฉันอยู่ในช่วง 0 ถึง 31
    • bitC :=(c / 2^i) และ 1
    • bitA :=(a / 2^i) และ 1
    • bitB :=(b / 2^i) และ 1
    • ถ้า (bitA OR bitB) ไม่เหมือนกับ bitC ดังนั้น
      • ถ้า bitC เป็น 0
        • ถ้า bitA =1 และ bitB =1 ให้เพิ่ม ans 2 หรือเพิ่ม ans 1
      • มิฉะนั้น เพิ่มขึ้น 1
  • คืนสินค้า

ตัวอย่าง(C++)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int minFlips(int a, int b, int c) {
      int ans = 0;
      for(int i = 0; i < 32; i++){
         int bitC = (c >> i) & 1;
         int bitA = (a >> i) & 1;
         int bitB = (b >> i) & 1;
         if((bitA || bitB) != bitC){
            if(!bitC){
               if(bitA == 1 && bitB == 1){
                  ans += 2;
               }
               else {
                  ans += 1;
               }
            }
            else{
               ans += 1;
            }
         }
      }
      return ans;
   }
};
main(){
   Solution ob;
   cout << (ob.minFlips(2,6,5));
}

อินพุต

2
6
5

ผลลัพธ์

3