GESP编程共123题,本题是整站第1464题,已经有人完成了本题,加油!
小 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其中:
#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;
}
核心:位运算的数学性质与简化问题。
本站题目仅供学习,GESP版权归CCF所有,如有侵权请联系删除。站长陈老师QQ及微信:208234。