陣列中集合位數為 K 的倍數的元素個數


集合位是 0 和 1 的二進位制表示形式。這個數字 1 在計算機中被稱為集合位。讓我們來看一個例子來理解集合位的計算:

讓我們來看一個例子來理解集合位的計算:

整數 96 的集合位計算為:

假設我們想要將位設定為 96 的和。如上所示,我們將為總和為 96 的那些陣列元素設定位 1。這樣我們將形成 2 組位。因此,如果我們將 K 值設為 2,則 96 的集合位是它的倍數。

在這個程式中,我們將解決集合位是 K 的倍數的陣列元素計數問題。

演算法

  • 我們將從名為‘bits/stdc++.h’的標頭檔案開始程式,該檔案包含 C++ 的所有標準模板庫。

  • 我們正在建立一個名為‘find_bitcount’的函式定義,它接受三個引數,即 arr、n 和 k,並定義如下:

    arr[] − 從陣列的主函式獲取陣列輸入。

    n − 陣列的長度

    k − 檢查集合位計數的可整除性。

    這將計算陣列元素的總集合位計數。

  • 然後我們將‘0’儲存到‘ans’變數中,該變數將跟蹤滿足條件的數字的計數。

  • 我們開始 for 迴圈以迭代每個元素並將陣列元素,即‘arr[i]’,儲存到‘x’變數中,該變數稍後將在 while 迴圈中滿足條件以檢查總集合位計數的條件。這樣,函式將‘x’初始化為陣列元素值。

  • 然後將變數‘setBitsCount’初始化為‘0’,它將跟蹤當前陣列元素的集合位計數。

  • 接下來,我們建立一個 while 迴圈來檢查 x(儲存在 x 中的陣列元素)是否大於 0,並執行以下操作:

    • setBitsCount += x & 1 − 位運算子 & 與 1 一起用於在迴圈中確定 x 的最低有效位是否為 1。

    • x = x >> 1 − 如果結果為 1,則集合位計數增加 1。然後在迴圈中使用 >> 運算子(消除最低有效位)將 x 向右移動 1 位。

  • 現在使用 if 語句,我們使用 ‘%’ 運算子檢查‘setBitsCount’是否可被‘k’整除,如果其結果等於 ‘0’,則當前陣列元素滿足條件,並將變數‘ans’增加‘1’

  • 處理上述所有條件後,函式將返回‘ans’的值,該值將定義陣列元素的總集合位計數。

  • 繼續開始主函式並宣告所有陣列元素。然後我們將‘n’初始化為查詢陣列的大小,並將變數‘K’初始化為‘2’,它將檢查陣列元素是否是 K 的倍數。

  • 最後,在列印語句中,我們呼叫名為‘find_bitcount()’的函式定義並獲取結果。

示例

在這個程式中,我們將實現集合位是 K 的倍數的陣列元素的計數。

#include <bits/stdc++.h>
#include <bits/stdc++.h>
using namespace std;

// Function to find the count of numbers
int find_bitcount(int arr[], int n, int k) {
   int ans = 0;
   for (int i = 0; i < n; i++) {
      int x = arr[i];
      int setBitsCount = 0;

      // Calculate the set-bits count of the element x
      while (x > 0) {
         setBitsCount += x & 1;
         x = x >> 1;
      }

      // Check if the setbits count
      // is divisible by K
      if (setBitsCount % k == 0)
      ans++;
   }
   return ans;
}
int main() {
   int arr[] = { 6, 845, 4, 168, 7896 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int K = 2;
   cout << "There are "<<find_bitcount(arr, n, K)<<" array element whose setbits are in a multiple of K";
   return 0;
}

輸出

There are 3 array element whose setbits are in a multiple of K

結論

我們探討了集合位是 K 的倍數的陣列元素計數的概念。在這個程式中,透過定義函式,它計算集合位陣列元素的總數。然後我們觀察集合位計數如何透過 >> 運算子進行移位,並使用條件語句檢查有多少陣列元素通過了集合位計數。最後,我們簡單地列印結果。

更新於:2023年5月10日

291 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.