首頁 >後端開發 >C++ >計算數組中元素的個數,其二進位表示中的1的個數是K的倍數

計算數組中元素的個數,其二進位表示中的1的個數是K的倍數

WBOY
WBOY轉載
2023-09-19 22:09:08750瀏覽

設定位元是0和1的二進位表示形式。這個數字1被稱為計算機中的設定位。讓我們舉一個例子來理解設定位的計算 -

讓我們舉一個例子來理解setbit計算 -

整數96的設定位元計算為

計算數組中元素的個數,其二進位表示中的1的個數是K的倍數

假設我們想將位元設為96的總和。所以根據上面的表示,我們將把位1設定為那些數組元素,它們的總和將為96。這樣我們將形成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',那麼當前數組元素滿足條件,透過'1'遞增變數'ans '。

  • 在處理完上述所有條件後,函數傳回‘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的倍數。在這個程式中,透過定義函數來計算設定位數數組元素的總計數。然後,我們觀察設定位數如何透過>>運算子進行移位,並使用條件語句來檢查有多少個陣列元素傳遞給設定位數。最後,我們簡單地列印結果。

以上是計算數組中元素的個數,其二進位表示中的1的個數是K的倍數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除