📅 2026-03-23 | 算法日记:位运算与循环控制专题

1. 📖 今日题目概览

题目名称

核心考点

掌握程度

斐波那契数-递推

17届蓝桥杯14天省赛冲刺营1期 - 斐波那契数列-递推 - 蓝桥云课

数组迭代、递推公式

⭐⭐⭐⭐⭐

逃离高塔 (2025层

17届蓝桥杯14天省赛冲刺营1期 - 【真题】逃离高塔 - 蓝桥云课

暴力枚举、条件判断

⭐⭐⭐⭐

二进制中1的个数

17届蓝桥杯14天省赛冲刺营1期 - 【真题】美丽的2024-位运算 - 蓝桥云课

位运算 x & 1, x >>= 1

⭐⭐⭐⭐

第23个满足条件的数

17届蓝桥杯14天省赛冲刺营1期 - 【真题】3个1-位运算 - 蓝桥云课

函数封装、计数器逻辑

⭐⭐⭐


2. 💻 核心代码复盘

场景再现:统计一个数二进制中有多少个 1。这是今天最关键的位运算逻辑。

int count_ones(int x) {

    int cnt = 0;

    while (x) {

        if (x & 1) cnt++; // 检查最低位是否为 1

        x >>= 1;         // 右移一位,继续检查

    }
    return cnt;

}

3. ⚠️ 踩坑记录(重点反思!

❌ 语法低级错误
  • 分号问题:今天在写 for 循环时,习惯性在 for(...); 后面加了分号,导致循环体直接失效。

改进方案:写循环时,强迫自己先打 {} 再回车写内容。

  • 漏写分号:在定义变量或 return 语句结尾经常漏掉 ;

警示:编译报错时优先看行尾。

🧠 逻辑卡壳处
  • 循环嵌套:在“第 23 个满足条件”的题目中,内层循环处理位运算,外层循环控制数字增长。由于 ans++ 的位置放错,导致找错了一个数。

  • 体会:当逻辑变复杂时,函数封装(如把位运算逻辑单独写成 solve 函数)是救命稻草,能让代码结构非常清晰。


4. 💡 今日新发现(Tips)

  1. 位运算提速x >>= 1 效果等同于 x / 2,但在底层执行更快。

  2. 万能头文件#include <bits/stdc++.h> 在做算法题时非常省心,不用一个个记头文件。

  3. IO 优化std::ios::sync_with_stdio(false); cin.tie(nullptr); 这一行能极大提高 cin 的读取速度,防止在大数据量下超时。