[GESP202503 三级] 2025

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。