已知A,B,求有多少组X,Y满足X∧Y=A,X∨Y=B,X≤Y

来自2025.4.27得物笔试题

考虑A,B,X,Y的二进制表示形式,由X∨Y=B知X和Y的最高位不可能比B更高,由X∧Y=A知X和Y的最高位不可能比A更低。

我们将总位数定为A和B位数的最大值,逐位进行考察。

A_i = 0, B_i = 0,必有X_i = 0, Y_i = 0

A_i = 0, B_i = 1,必有X_i = 0, Y_i = 1X_i = 1, Y_i = 0

A_i = 1, B_i = 0,这种情况下不存在满足条件的X,Y

A_i = 1, B_i = 1,必有X_i = 1, Y_i = 1

可得出如下结论:


\min\{A,B\} \leq X \leq Y \leq \max\{A,B\}

X + Y = A + B

利用这个结论写出程序

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int count = 0;
        for (int i = Math.min(a, b); i <= Math.max(a, b); i++) {
            int j = a + b - i;
            if (j < i) {
                break;
            }
            if ((i & j) == a && (i | j) == b) {
                count++;
            }
        }
        System.out.println(count);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值