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