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

C++を使用してXORを最大にするために削除する要素の最小数。


問題の説明

数Nが与えられます。タスクは、残りの要素から取得されるXORが最大になるように、Nまでの間に削除される要素の最小数を見つけることです。

アルゴリズム

1. If n is 1 or 2 then there is no need to remove any element. Hence answer is zero
2. Find a number which is power of 2 and greater than or equal to. Let us call this number as nextNumber
   2.1. If n == nextNumber or n == (nextNumber – 1) then answer is 1
   2.2. If n = (nextNumber -2) then answer is 0
3. If n is an even then answer is 1 otherwise 2

#include <iostream>
using namespace std;
int nextPowerOf2(int n){
   if (n && !(n & (n - 1))) {
      return n;
   }
   int cnt = 0;
   while (n) {
      n = n / 2;
      ++cnt;
   }
   return (1 << cnt);
}
int elmentsToBeRemoved(int n){
   if (n == 1 || n == 2) {
      return 0;
   }
   int nextNumber = nextPowerOf2(n);
   if (n == nextNumber || n == nextNumber -1) {
      return 1;
   } else if (n == nextNumber - 2) {
      return 0;
   } else if (n & 1) {
      return 2;
   } else {
      return 1;
   }
}
int main(){
   int n = 10;
   cout << "Numbers to be removed = " <<
   elmentsToBeRemoved(n) << endl;
   return 0;
}

出力

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Numbers to be removed = 1s

  1. C++で文字列回文を作成するための削除の最小数。

    問題の説明 サイズ「n」の文字列が与えられます。タスクは、文字列回文を作成するために最小数の文字を削除することです。 指定された文字列が「abcda」の場合、最初と最後を除く任意の2文字を削除して、回文にすることができます。 文字「b」と「c」を削除すると、「ada」文字列は回文になります 文字「c」と「d」を削除すると、「aba」文字列は回文になります 文字「b」と「d」を削除すると、「aca」文字列は回文になります アルゴリズム 1. Find longest palindromic subsequence of given string. Let’s

  2. C ++を使用して、数の因数の最小合計を求めます。

    ここでは、与えられた数の因子の最小合計を取得する方法を見ていきます。数が12であると仮定します。これはさまざまな方法で因数分解できます- 12 =12 * 1(12 + 1 =13) 12 =2 * 6(2 + 6 =8) 12 =3 * 4(3 + 4 =7) 12 =2 * 2 * 3(2 + 2 + 3 =7) 最小の合計は7です。数値を取り、最小の因子の合計を見つけようとします。最小の因数分解の合計を取得するには、可能な限り数を因数分解する必要があります。言い換えれば、素因数を足して合計Sを求めようとすると、その合計は最小化されると言えます。 例 #include<