小红的与运算,小欧的选数乘积( C语言、C++、Python解题)

目录

1、小红的与运算

1.1、题目

1.2、示例

1.3、解题思路

1.4、算法步骤

1.5、C代码实现

1.6、C代码解释

1.7、C++代码实现

 1.8、C++代码解释

1.9、Python代码实现

1.10、python代码解释

2、小欧的选数乘积

2.1、题目

2.2、示例 

示例1

示例2

示例3

2.3、解决思路

2.4、C代码实现 

2.5、C代码解释

 2.6、C++代码实现

 2.7、Python代码实现


1、小红的与运算

1.1、题目

小红拿到了一个数组,她想在其中选择k个数,使得这k个数的按位与运算的值尽可能大。你能帮帮她吗?

输入描述

第一行输入两个正整数n和k,用空格隔开。

第二行输入n个正整数ai,代表小红拿到的数组。

1 ≤ k ≤ n ≤ 100000

1 ≤ ai ≤ 1000000000

 输出描述

选k个数 按位与 运算的最大值

1.2、示例

输入

5 2

2 3 4 6 5

输出

说明

选择5和6,位与运算为4。 

1.3、解题思路

  1. 逐位确定:从最高位(如第30位,因为10^9大约是30位)到最低位(第0位)逐位检查是否可以设置为1。

  2. 贪心策略:对于当前位,尝试将其设置为1,然后统计数组中满足以下条件的数的个数:

    • 这些数在当前位为1。

    • 这些数的高位(已经确定的位)也满足之前的选择条件。

  3. 更新结果:如果满足条件的数的个数大于或等于k,则保留该位为1,并在后续处理中只考虑这些满足条件的数。

1.4、算法步骤

  1. 初始化结果为0。

  2. 从最高位到最低位进行循环:

    • 尝试将当前位设置为1,形成候选结果。

    • 统计数组中满足(num & candidate) == candidate的数的个数。

    • 如果个数大于或等于k,则更新结果为候选结果。

  3. 最终输出结果。

1.5、C代码实现

#include 

#define MAX_BITS 30

int main() {
    int n, k;
    int a[100001];

    scanf("%d %d", &n, &k);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    
    int result = 0;
    for (int bit = MAX_BITS; bit >= 0; bit--) {
        int candidate = result | (1 << bit);
        int count = 0;
        for (int i = 0; i < n; i++) {
            if ((a[i] & candidate) == candidate) {
                count++;
                if (count >= k) {
                    break;
                }
            }
        }
        if (count >= k) {
            result = candidate;
        }
    }
    
    printf("%d\n", result);
    return 0;
}

1.6、C代码解释

  1. 输入处理:读取输入的nk,以及数组a

  2. 初始化结果result初始化为0,用于存储最终的按位与结果。

  3. 逐位检查

    • 从最高位(MAX_BITS,这里设为30)到最低位(0)进行循环。

    • 对于每一位,尝试将其设置为1,形成candidate

    • 统计数组中满足(a[i] & candidate) == candidate的数的个数count

    • 如果count >= k,则更新resultcandidate

  4. 输出结果:打印最终的result

1.7、C++代码实现

#include 
#include 
using namespace std;

int maxBitwiseAnd(int n, int k, vector& arr) {
    int res = 0;
    for (int bit = 30; bit >= 0; --bit) {
        int candidate = res | (1 << 

你可能感兴趣的:(牛客题库,牛客,小红的与运算,小欧的选数乘积,贪心算法,c语言,c++,python)