✏️ 纠错
第 103 题 / 共 155 题
题目描述
小 A 有一个整数 x,他想找到最小的正整数 y 使得下式成立:
(x and y)+(x or y)=2025其中 and 表示二进制按位与运算,or 表示二进制按位或运算。如果不存在满足条件的 y,则输出 −1。
输入格式
一行,一个整数 x。
输出格式
一行,一个整数,若满足条件的 y 存在则输出 y,否则输出 −1。
输入输出样例
输入 #1
1025
输出 #1
1000
说明/提示
对于所有测试点,保证 0≤x<2025。
(x and y)+(x or y)=2025其中:
- and 表示按位与运算,运算符为 &。
- or 表示按位或运算,运算符为 ∣。
你真棒!
📝 题目解析
考纲知识点:
枚举法/位运算
分析:
模拟题意,枚举y,需要注意的是,对于正整数x和y的任意取值,x|y + x%y的计算结果均大于原数,所以y的枚举范围为[1, 2025]。
参考程序
#include <stdio.h>
using namespace std;
int x;
int main() {
scanf("%d", &x);
for (int i = 1; i <= 2025; i++)
if ((x & i) + (x | i) == 2025) {
printf("%d\n", i);
return 0;
}
printf("-1\n");
return 0;
}
知识点解析:
利用位运算性质:x and y+x or y=x+yx and y+x or y=x+y。题目转化为求最小的 yy 使得 x+y=2025x+y=2025,即 y=2025−xy=2025−x。需验证 y>0y>0。
参考代码:
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
int y = 2025 - x;
cout << (y > 0 ? y : -1);
return 0;
}
核心:位运算的数学性质与简化问题。