GESP2025年3月认证C++三级( 第三部分编程题(1、2025)

张开发
2026/4/3 21:36:12 15 分钟阅读
GESP2025年3月认证C++三级( 第三部分编程题(1、2025)
一、‍♂️ 故事背景魔法数字锁小A来到了一个神秘宝箱前 宝箱上写着一行奇怪的咒语(x i) (x | i) 2025 只有找到最小的正整数i 才能打开宝箱二、 任务目标 输入一个数字x 找到最小的正整数i让(x i) (x | i) 2025成立 如果找不到就输出-1三、算法分析1、 第一步认识两个魔法1✨ 魔法1按位与 规则1 1 1 其他情况 0 就像 “两个人都同意才亮灯”2✨ 魔法2|按位或 规则有1就等于1 就像 “只要有一个人同意就亮灯”2、 第二步进一步理解假设x 5 → 二进制 0101 i 3 → 二进制 0011✏️ 计算① 按位与0101 0011 ----- 0001 → 1② 按位或0101 |0011 ----- 0111 → 7③ 相加1 7 8 如果等于2025就成功3、 第三步怎么找 i1 关键思路 i 是未知的 我们可以使用枚举法一个一个试2 故事我们像一个小侦探 ️‍♂️ 从 i 1 开始试试 1 ❌ 试 2 ❌ 试 3 ❌ …… 直到找到4、 第四步范围是多少我们可以for (int i 1; i 2025; i) 为什么 因为要的结果是 2025x | i 的结果是大于等于i所以最大搜索到2025足够了。 超过就没必要了5、✏️ 第五步完整代码#include iostream using namespace std; int main() { int x; cin x; for(int i 1; i 2025; i) { if((x i) (x | i) 2025) { cout i endl; return 0; // 找到就结束 } } cout -1 endl; // 没找到 return 0; }6、 第六步举个完整例子1 输入x 52 过程程序会i 1 → 不行 i 2 → 不行 i 3 → 不行 …… 一直试3 如果某个 i 满足(x i) (x | i) 2025 就输出它如果找不到输出-1。7、 第七步超级重要的小技巧1 技巧1位运算不怕记住口诀 → 都是1才是1 | → 有1就是12 技巧2暴力枚举 试试就试试枚举范围要想好3 技巧3找到就结束return 0; 节省时间 ⚡四、 最终总结 这题本质就是枚举 位运算五、‍♂️ 一句话口诀不会推就枚举 按位运算慢慢试

更多文章