使用位運算 AND 在 C++ 中將 0 轉換為 X 的最大步驟數


在這個問題中,我們給定一個整數 X。我們的任務是找到從 0 轉換為 X 的總步驟數。

有效轉換 - 當從 A 轉換為 B 時,計算一步。轉換髮生的條件是 A != B 且 A & B = A (& 是按位 AND)。因此,一步是從 A 轉換為 B,我們必須建立一個程式來計算從 0 轉換為 X 的最大步驟數。

讓我們舉個例子來理解這個問題:

輸入 - X = 7

輸出 - 3

解釋 -

我們必須從 0 轉換為 7。

Steps taken will be
Step1: 0(00) to 1(01) , 0!= 1 and 0&1 = 0, transform 00=>01
Step2: 1(001) to 3(011) , 1!= 3 and 1&3 = 1, transform 001=>011
Step3: 3(0011) to 7(0111) , 3!= 7 and 3&7 = 3, tranform 0011=>0111.

為了解決這個問題,我們將計算 X 中設定位的數量,這將給出從 0 到 X 的最大轉換。

由於我們需要最大轉換,我們必須逐步進行每個設定位(值為 1 的位)的轉換。逐位轉換將給出從 0 到 X 的最大步驟。

在從 A 到 B 的轉換中,A 的所有設定位都應該在 B 中設定,但反過來不一定。因此,最小轉換可以為 1,因為 0 中沒有設定位,這使得最小的轉換是直接的。

正如我們在所舉的例子中看到的,對數字及其按位 AND 的二進位制轉換。

示例

顯示我們解決方案實現的程式:

// 程式:使用位運算 AND 在 C++ 中查詢從 0 到 X 的最大轉換步驟

 線上演示

#include <bits/stdc++.h>
using namespace std;
int maxtransformation(int x){
   int steps = 0;
   // counting number of bits
   while (x) {
      steps += x & 1;
      x >>= 1;
   }
   return steps;
}
int main(){
   int x = 7;
   cout<<"The maximum number of steps to transform 0 to "<<x<<" with bitwise AND are "<<maxtransformation(x);
   return 0;
}

輸出

The maximum number of steps to transform 0 to 7 with bitwise AND are 3

更新於:2020年6月3日

97 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.