GESP2026年3月认证C++三级( 第三部分编程题(1)二进制回文串 )

发布时间:2026/5/22 22:59:25

GESP2026年3月认证C++三级( 第三部分编程题(1)二进制回文串 ) 编程题1二进制回文串大冒险一、 故事背景在“数字王国”里有一种神秘的数字叫二进制回文数国王发布任务从 1 到 n找出所有“二进制左右对称”的数字二、‍♂️ 什么是“二进制回文数”1、就像镜子一样 正着看 倒着看2、 举例1 数字 5十进制 → 二进制5 → 101 正着101 反着101✅ 是回文2❌ 数字 66 → 110 正着110 反着011❌ 不一样三、 任务目标 输入一个 n 找出 1n 之间有多少个“二进制回文数”四、 解题思路1、 第一步把数字变成二进制1就像“拆积木”while(t 0) { a[pos] t % 2; // 取最后一位 t / 2; }2 故事理解 每次“除以2”取余数 就得到二进制的一位3 举例66 ÷2 → 3 余0 3 ÷2 → 1 余1 1 ÷2 → 0 余14 二进制倒着存0 1 12、 第二步判断是不是回文1就像照镜子for(int i 0; i pos; i) { if(a[i] ! a[pos - i - 1]) 不是回文 }2 故事理解 左边 vs 右边 一个一个对比3、 第三步统计答案如果是回文ans;五、 参考程序#include iostream using namespace std; int main() { int n; cin n; int ans 0; // 记录答案 for(int i 1; i n; i) { int t i; int a[50]; // 存二进制 int pos 0; // 转二进制 while(t 0) { a[pos] t % 2; t / 2; } // 判断回文 bool ok true; for(int j 0; j pos; j) { if(a[j] ! a[pos - j - 1]) { ok false; break; } } // 如果是回文 if(ok) ans; } cout ans endl; return 0; }六、 超详细运行示例1输入62 每个数检查数字二进制回文11✅210❌311✅4100❌5101✅6110❌3 结果答案 3七、 考点总结 1. 十进制转二进制 不断除以2取余数 2. 回文判断 左右对称 3. 枚举思想 从 1 到 n 一个个检查八、 最终总结 除2取余变二进制 左右比较判回文 从1到n全检查 满足条件就1

相关新闻