C++で隣接する要素を考慮しない配列の最大セットビット合計
この問題では、整数の配列arr[]が与えられます。私たちのタスクは、C ++の隣接する要素を考慮せずに、配列の最大セットビット合計を計算するプログラムを作成することです。
問題の説明 −ここに、配列arr[]があります。各数値のセットビット数を見つける必要があります。次に、配列の隣接する要素の最大セットビット合計を見つけます。つまり、a [i] + a [i+2]の最大合計…。
問題を理解するために例を見てみましょう
入力
arr[] = {1, 4, 6, 7}
出力
4
説明
要素がバイナリ形式の配列
arr[] = {01, 100, 101, 111} Bit count array = {1, 1, 2, 3}
代替ビット数
arr[0] + arr[2] = 1 + 2 = 3 arr[1] + arr[3] = 1 + 3 = 4
最大合計=4。
ソリューションアプローチ
この問題を解決するために、数値に設定されているビット数を見つけるだけです。そして、セットビットの最大数を持つ代替ペアを見つけます。
最大合計は、0から始まる配列または1から始まる配列の場合になります。したがって、そのうちの2つの場合を確認する必要があります。
ソリューションの動作を説明するプログラム
例
#include<iostream> using namespace std; int countSetBit(int n){ int setBits = 0; while(n) { setBits++; n = n & (n - 1); } return setBits; } int findMaxBitAltSubArray(int arr[], int n){ int EvenSum = countSetBit(arr[0]); int OddSum = 0; for (int i = 1; i < n; i++){ if(i % 2 == 0){ EvenSum += countSetBit(arr[i]); } else { OddSum += countSetBit(arr[i]); } } if(EvenSum >= OddSum){ return EvenSum; } return OddSum; } int main() { int arr[] = {1, 4, 6, 7}; int n = 4; cout<<"The maximum set bit sum in the array without considering adjacent elements is "<<findMaxBitAltSubArray(arr, n); return 0; }
出力
The maximum set bit sum in the array without considering adjacent elements is 4
-
C++で2つの要素が隣接しないような循環配列の最大合計
この問題では、循環配列cirArr[]が与えられます。私たちのタスクは、C++で2つの要素が隣接しないように循環配列の最大合計を見つけるプログラムを作成することです。 問題の説明 循環配列の場合、隣接する要素を取得できないように、配列の要素の最大合計を見つける必要があります。つまり、代替要素を取得する必要があります。 循環アレイ は、配列の最後の要素が最初の要素に接続されている特殊なタイプの配列です。 問題を理解するために例を見てみましょう 入力 cirArr[] = {4, 1, 5, 3, 2} 出力 9 説明 最大合計循環サブシーケンスは[4、5、2]です。合計=9 ソリ
-
C ++の合計配列パズル?
ここでは、配列に関連する1つの興味深い問題を確認します。 n個の要素を持つ配列があります。 n個の要素の別の配列を作成する必要があります。ただし、2番目の配列のi番目の位置は、i番目の要素を除く最初の配列のすべての要素の合計を保持します。そして、1つの制約は、この問題では減算演算子を使用できないことです。 減算演算を使用できれば、すべての要素の合計を取得し、最初の配列のi番目の要素を減算して、2番目の配列のi番目の場所に格納することで、この問題を簡単に解決できます。 ここでは、毎回要素を追加することでこれを解決し、0..n-1のiについては、位置iの要素を無視します。ポイントを得るためのア