数组中集合位数为 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 的倍数的数组元素计数的概念。在这个程序中,通过定义函数,它计算集合位数组元素的总数。然后我们观察集合位计数如何通过 >> 运算符进行移位,并使用条件语句检查有多少数组元素通过了集合位计数。最后,我们简单地打印结果。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP