在C ++中使用按位与将0转换为X的最大步骤

在这个问题中,我们得到一个整数X。我们的任务是找到从0转换为X所需的步骤总数。

有效转换-从A到B进行一次转换时,将计入一个步骤。要进行转换的条件是A!= B且A&B = A(&是按位与)。因此,第一步是从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中没有设置位,这直接导致了最小转换。

正如我们在示例中看到的那样,对数字及其按位与进行二进制转换。

示例

展示我们解决方案实施的程序-

//在C ++中查找通过位与将0转换为X的最大步骤

#include <bits/stdc++.h>
using namespace std;
int maxtransformation(int x){
   int steps = 0;
   //计算位数
   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