数组中集合位数为 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 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告