news 2026/4/15 14:28:27

算法学习日记 | 枚举

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法学习日记 | 枚举

🧠 算法学习日记 | 今天我用「枚举」解了三道题,原来简单也能很优雅!

大家好,我是你们的算法学习搭子 👋
今天继续我的算法入门之旅,重点练习了**枚举(Brute Force)**这一基础但极其重要的方法。

很多人觉得“枚举=暴力=低效”,但其实,在数据规模可控的情况下,枚举是最可靠、最直观的解题方式。更重要的是——它能帮你快速验证思路是否正确!

今天我完整做了三道题,每一道都坚持用最朴素的枚举方法解决。下面我把题目原文我的原始代码原封不动贴出来,不做任何删减或美化,只为真实记录学习过程。


🔹 题目一:特别数的和

题目描述
小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。
请问,在 1 到 n 中,所有这样的数的和是多少?

输入描述
输入格式:
输入一行包含一个整数 $ n((1 \leq n \leq 10^4 $)。

输出描述
输出一行,包含一个整数,表示满足条件的数的和。

输入输出样例

输入 49 输出 574

运行限制

  • 最大运行时间:1s
  • 最大运行内存:256M

✅ 我的代码

#include<iostream>usingnamespacestd;boolf(intx){while(x){inty=x%10;if(y==2||y==0||y==1||y==9){returntrue;}x/=10;}returnfalse;}intmain(){intn;cin>>n;intsum=0;for(inti=1;i<=n;i++){if(f(i)){sum+=i;}}cout<<sum;return0;}

🔹 题目二:反倍数

题目描述
给定三个整数 $ a, b, c $,如果一个整数既不是 $ a $ 的整数倍也不是 $ b $ 的整数倍还不 是 $ c $ 的整数倍,则这个数称为反倍数。
请问在 1 至 $ n $ 中有多少个反倍数。

输入描述
输入的第一行包含一个整数 $ n $。
第二行包含三个整数 $ a, b, c,相邻两个数之间用一个空格分隔。其中,,相邻两个数之间用一个空格分隔。 其中,,相邻两个数之间用一个空格分隔。其中,1 \leq n \leq 1000000,,1 \leq a \leq n,,1 \leq b \leq n,,1 \leq c \leq n $。

输出描述
输出一行包含一个整数,表示答案。

输入输出样例

输入 36 2 3 6 输出 10

样例说明
以下这些数满足要求:1, 5, 7, 11, 13, 17, 19, 23, 25, 29。

运行限制

  • 最大运行时间:1s
  • 最大运行内存:256M

✅ 我的代码

#include<iostream>usingnamespacestd;inta,b,c;boolf(intx){if(x%a!=0&&x%b!=0&&x%c!=0)returntrue;elsereturnfalse;}intmain(){intn;cin>>n;cin>>a>>b>>c;intcount=0;for(inti=1;i<=n;i++){if(f(i)){count++;}}cout<<count;return0;}

🔹 题目三:找到最多的数

问题描述
在一个 $ n \times m $ 的矩阵中,有一个数字出现了超过一半的次数,请设计一个高效算法找到这个数字。

输入格式
输入第一行包含两个整数 $ n $ 和 $ m,表示矩阵的大小(,表示矩阵的大小(,表示矩阵的大小(1 \leq n, m \leq 10^3 $)。
接下来 $ n $ 行,每行包含 $ m $ 个正整数,表示矩阵中的元素。

输出格式
输出一个整数,表示矩阵中出现次数超过一半的数字。

样例输入

3 3 1 2 3 2 2 2 1 2 2

样例输出

2

运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java2s256M
Python33s256M
PyPy33s256M
Go3s256M
JavaScript3s256M

✅ 我的代码

#include<iostream>#include<bits/stdc++.h>usingnamespacestd;map<int,int>mp;intmain(){intm,n;cin>>m>>n;for(inti=1;i<=n*m;i++){inta;cin>>a;mp[a]++;}for(constauto&i:mp){if(2*i.second>n*m){cout<<i.first;}}return0;}

🌟 我的思考

这三道题,我全部使用了枚举的思想:

  • 第一题:枚举每个数,判断其各位数字是否含有 2、0、1、9
  • 第二题:枚举 1 到 n 的每个数,判断是否为 a、b、c 的非倍数
  • 第三题:枚举每一个矩阵元素,统计频次后找出超过一半的数

虽然没有使用高级技巧(如数学公式、位运算、投票算法等),但枚举让我把问题拆解得非常清晰。只要逻辑正确,就能通过测试。

而且我发现:很多题目看似复杂,其实核心就是“遍历 + 判断”。当你能把枚举写对,就已经赢了一半。


✅ 总结

  • 枚举不是“低端”,而是“基础”
  • 题目描述要读准,边界条件要抠细
  • 代码可以简陋,但逻辑必须严谨
  • 先求正确,再求高效

如果你也在刷算法题,不妨试试今天这三道题,用最直白的枚举方法做一遍。
有时候,慢一点,反而更快。

欢迎在评论区贴出你的解法,我们一起交流进步!👇


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 10:45:19

Python × RISC-V:别再空谈生态了,性能测试才是硬道理

Python RISC-V:别再空谈生态了,性能测试才是硬道理 ——Echo_Wish 聊聊:在真实世界里,RISC-V 跑 Python 到底行不行? 大家好,我是 Echo_Wish。 最近两年,只要你稍微关注一点 芯片产业 / RISC-V / 边缘计算 / 国产化,一定会被一个问题反复问到: 👉 RISC-V 生态起来…

作者头像 李华
网站建设 2026/4/9 13:55:12

巧用Buffer.compare高效比对二进制数据

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 巧用Buffer.compare&#xff1a;Node.js中二进制数据高效比对的深度解析 目录 巧用Buffer.compare&#xff1a;Node.js中二进制数…

作者头像 李华
网站建设 2026/4/9 8:57:46

COMSOL光学模型:双芯光纤与SPR折射率传感实验仿真模拟

COMSOL光学模型:双芯光纤/SPR折射率传感实验仿真模拟 深夜两点半的实验室&#xff0c;键盘声突然停了。我盯着屏幕上跳动的电场分布图&#xff0c;突然意识到这个双芯光纤SPR模型的玄机藏在几何参数里——两个纤芯的间距只要差0.1微米&#xff0c;传感灵敏度就能差出个数量级。…

作者头像 李华
网站建设 2026/4/10 11:29:13

北大腾讯团队只改一行代码,让AI图像生成效果提升20%!

这项研究由北京大学和腾讯混元实验室共同完成&#xff0c;并于2026年1月发表在计算机视觉领域的顶级学术期刊上。论文编号为arXiv:2601.17124&#xff0c;感兴趣的读者可以通过此编号查找完整的技术细节。想象一下&#xff0c;你正在烘焙蛋糕&#xff0c;面前有两个不同的烤箱。…

作者头像 李华