当前位置: 首页 > news >正文

算法学习日记 | 枚举

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

大家好,我是你们的算法学习搭子 👋
今天继续我的算法入门之旅,重点练习了**枚举(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 的非倍数
  • 第三题:枚举每一个矩阵元素,统计频次后找出超过一半的数

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

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


✅ 总结

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

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

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


http://www.jsqmd.com/news/310087/

相关文章:

  • 毕业救星!6款免费降ai率工具亲测,一键让论文AI率从80%降至5%
  • Flutter for OpenHarmony:用三方 UI 库快速构建精美界面
  • 学长亲荐!10款AI论文写作软件测评:本科生毕业论文必备工具
  • Flutter for OpenHarmony:三方库入门与兼容性初探
  • Flutter for OpenHarmony:安全高效地使用网络请求三方库
  • Clawdbot可自我托管的个人AI助手
  • MATLAB中的两种自动保存文件格式
  • Java毕设项目:基于springboot的服装制造有限公司综合管理系统(源码+文档,讲解、调试运行,定制等)
  • 【毕业设计】基于springboot的服装制造有限公司综合管理系统(源码+文档+远程调试,全bao定制等)
  • 【课程设计/毕业设计】基于Spring Boot的校园台球厅人员与设备管理系统基于springboot的台球厅管理系统【附源码、数据库、万字文档】
  • MongoDB 简介
  • 【滤波跟踪】基于卡尔曼滤波融合加速度计(Acce)、磁力计(Magn)、陀螺仪(Gyro)数据实现姿态估计附Matlab代码
  • Python3 条件控制
  • 【翼型】基于非主导排序遗传算法的翼型形状优化附Matlab代码和报告
  • MATLAB基于GA-BP神经网络与NSGA-Ⅱ多目标优化算法结合,用于优化42CrMo钢表面激光熔覆工艺参数
  • Kriging(克里金)代理模型和遗传算法(GA)结合的单目标优化,MATLAB代码
  • 聚划算!CNN-GRU、CNN、GRU三模型多特征分类预测对比Matlab实现
  • Go 企业级分布式 ID 生成系统设计与实现全指南
  • 超级复杂任务执行的Agent的执行计划生成Agent架构设计和核心源代码实现方案
  • Spring Boot + Redis + Lua 打造高并发秒杀系统
  • 车辆轨迹预测支持向量机算法(SVM)和BP神经网络含全套代码(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • Go 微服务稳定性治理实战:限流、熔断、降级与 K8s 生产级架构
  • 【网安区块链项目参考】基于规则的智能合约漏洞检测系统
  • 4 数组篇
  • 数据挖掘项目-基于机器学习的电信用户流失分析及预测(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 全球标杆拆解:5 个国际化金融 APP 交易界面与 UI/UX 设计规范
  • Python公司客户数据分析项目(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • Python × RISC-V:别再空谈生态了,性能测试才是硬道理
  • 基于机器学习LASSO回归逻辑回归算法对心脏衰竭病症预测分析完整代码+报告(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 上海迪士尼游客评论数据分析报告(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码