news 2026/4/28 12:54:10

算法学习日记 | 枚举

作者头像

张小明

前端开发工程师

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/17 8:11:30

计算机Java毕设实战-基于springboot的台球厅管理系统基于springboot台球厅自助管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/27 14:00:06

Go 语言环境安装指南

Go 语言环境安装指南 引言 Go 语言,也被称为 Golang,是由 Google 开发的一种静态类型、编译型、并发型编程语言。由于其简洁的语法、高效的性能以及强大的并发处理能力,Go 语言在全球范围内受到了广泛的关注和喜爱。本文将详细介绍如何在您的计算机上安装 Go 语言环境,并…

作者头像 李华
网站建设 2026/4/26 10:49:17

苏州大学突破:新型注意力机制赋能AI语境适应性对话

这项由苏州大学联合百度公司进行的前沿研究发表于2026年1月24日&#xff0c;论文编号为arXiv:2601.17367v1&#xff0c;为大型语言模型的效率优化领域带来了重要突破。想了解完整技术细节的读者可以通过该论文编号查询原文。当我们人类处理信息时&#xff0c;会根据任务的重要性…

作者头像 李华
网站建设 2026/4/20 5:44:05

softmax函数与logits

softmax 函数有一种独特的优雅&#xff1a; softmax(zi)ezi∑jezj\text{softmax}(z_i) \frac{e^{z_i}}{\sum_j e^{z_j}}softmax(zi​)∑j​ezj​ezi​​ 这个函数将原始输出&#xff0c;仅仅是数字、logits&#xff0c;转换成了概率分布。 它最美妙之处在于它处理竞争的方式…

作者头像 李华