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

C++で同じ数のセットビットを持つ数値を加算することによる最大合計


問題の説明

N個の数値の配列が与えられた場合、タスクは、同じセットビット数の数値を加算することによって取得できる最大の合計を見つけることです

入力配列が{2、5、8、9、10、7}の場合、出力は14-

になります。
  • 2のセットビット数は1です

  • 5のセットビット数は2です

  • 8のセットビット数は1です

  • 9のセットビット数は2です

  • 10のセットビット数は2です

  • 7のセットビット数は3です

その場合、(5 + 9 + 10)の合計は24であり、そのセットビット数は2です

アルゴリズム

  • 配列をトラバースし、すべての要素の設定ビット数を数えます。

  • 配列を32ビット用に初期化します。この数は、最大32セットビットであると想定しています。

  • 配列を反復処理し、配列要素を設定されたビット数を示す位置に追加します。

  • トラバースして最大合計を見つけ、それを返します。

#include <bits/stdc++.h>
using namespace std;
int bitCount(int n){
   int count = 0;
   while (n) {
      count++;
      n = n & (n - 1);
   }
   return count;
}
int maxSum(int arr[], int n){
   int bits[n];
   for (int i = 0; i < n; i++) {
      bits[i] = bitCount(arr[i]);
   }
   int sum[32] = { 0 };
   for (int i = 0; i < n; i++) {
      sum[bits[i]] += arr[i];
   }
   int maximum = 0;
   for (int i = 0; i < 32; i++) {
      maximum = max(sum[i], maximum);
   }
   return maximum;
}
int main(){
   int arr[] = {2, 5, 8, 9, 10, 7};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Maximum sum = " << maxSum(arr, n) << endl;
   return 0;
}

出力

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

Maximum sum = 24

  1. C ++を使用して、マトリックス内の合計が最大の列を検索します。

    サイズがMxNの行列があるとします。合計が最大の列を見つける必要があります。このプログラムでは、トリッキーなアプローチには従わず、配列を列ごとにトラバースし、各列の合計を取得します。合計が最大の場合は、合計と列インデックスを出力します。 例 #include<iostream> #define M 5 #define N 5 using namespace std; int colSum(int colIndex, int mat[M][N]){    int sum = 0;    for(int i = 0; i<M; i++){

  2. C++で新しい数値を作成するための2つの数値の交互のビット

    この問題では、2つの数値の交互のビットを使用して数値を生成する必要があります。 。したがって、この問題では、2番目の数値の最初のビットを使用し、次に最初のビットの2番目のビットを使用し、2番目の数値の3番目のビットを使用し、最初から4番目というように続きます。 最初から、2番目の数字から3番目のビット、最初から3番目のビットというように続きます。 トピックをよりよく理解するために例を見てみましょう Input : n = 6 m = 10 Output : 2 Explanation : Bits representation of 6 = 0110 Bit representation