C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でビット単位のANDを使用して0をXに変換する最大ステップ


この問題では、整数Xが与えられます。私たちのタスクは、0からXに変換するために実行されるステップの総数を見つけることです。

有効な変換 − AからBへの変換が1回行われると、1ステップがカウントされます。変換が行われる条件は、A!=BおよびA&B =A(&はビット単位のAND)です。したがって、1ステップは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.

この問題を解決するために、0からXへの最大変換を行うXのセットビット数をカウントします。

最大の変換が必要なため、設定されたビット(値が1のビット)ごとに段階的に実行する必要があります。ビットごとに変換すると、0からXに変換するための最大ステップが得られます。

AからBへの変換では、AのすべてのセットビットをBにセットする必要がありますが、その逆は必要ありません。したがって、最小の変換を直接行う0に設定ビットがないため、最小変換は1になる可能性があります。

取った例でわかるように、数値とそのビットごとのANDの2進変換。

ソリューションの実装を示すプログラム-

//C++でビット単位のANDを使用して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

  1. C ++のビットごとのANDとは何ですか?

    ビットごとのAND演算子(&)は、第1オペランドの各ビットを第2オペランドの対応するビットと比較します。両方のビットが1の場合、対応する結果ビットは1に設定されます。それ以外の場合、対応する結果ビットは0に設定されます。ビット単位の包括的AND演算子の両方のオペランドは、整数型である必要があります。たとえば、 例 #include <iostream>   using namespace std;   int main() {      unsigned short a = 0x5555;      

  2. Pythonで最大のビットごとのANDとビットごとのORを持つサブシーケンスを検索します

    n個の要素の配列があるとすると、ビットの合計が最初のサブシーケンスのすべての要素の賢明なAND演算と、2番目のサブシーケンスのすべての要素のビット単位のOR演算が最大になります。 したがって、入力がA ={4、6、7、2}の場合、7のみを選択して最大AND値を取得し、すべてを選択して最大OR値を取得するため、出力は14になります(4 | 6 | 7 | 2)=7.したがって、結果は7 + 7=14になります。 これを解決するには、次の手順に従います- and_max:=arrの最大値 or_max:=0 0からarrのサイズまでの範囲のiの場合、実行します or_m