《枚举算法 “翻译官”:用 enum class 给 “游游的礼盒” 算分》
在算法题中“枚举所有可能” 是一种直观且有效的解题思路但直接用数字表示状态或选项时代码往往显得晦涩难懂。比如 “游游的礼盒” 这类问题需要枚举礼盒中不同物品的组合并计算最大值若用0、1、2代表物品很容易混淆逻辑。今天我们就用 C 的强类型枚举enum class来 “翻译” 枚举逻辑让代码既安全又易读。一、先看 “游游的礼盒” 问题枚举所有组合求最大值假设题目是这样的游游有一个礼盒里面可以放 3 件物品每件物品只能是 “金币”“宝石” 或 “药水”它们的分数分别是 2 分、5 分、3 分。求礼盒中 3 件物品的最大可能总分。核心思路枚举 3 件物品的所有可能组合计算每种组合的分数取最大值。传统写法会用0、1、2代表三种物品但用枚举类型能让代码 “说人话”。二、用枚举类型 “翻译” 物品从数字到语义首先用enum class定义物品类型把抽象的数字 “翻译” 成具体的语义cpp运行// 用强类型枚举定义物品每个枚举值对应一种物品 enum class Item { Coin, // 金币2分 Gem, // 宝石5分 Potion // 药水3分 };这样一来代码中不会再出现0、1、2而是直接用Item::Coin“点名” 物品可读性瞬间提升。三、枚举所有组合用枚举变量替代数字循环接下来我们需要枚举 3 件物品的所有可能组合。传统写法会用 3 层for循环遍历0-2现在直接用枚举变量循环配合显式转换控制范围cpp运行#include iostream using namespace std; // 定义物品枚举显式指定底层类型为int方便循环 enum class Item : int { Coin, // 0 Gem, // 1 Potion, // 2 Count // 3作为“哨兵值”标记枚举总数 }; // 根据物品类型获取分数 int getScore(Item item) { switch (item) { case Item::Coin: return 2; case Item::Gem: return 5; case Item::Potion: return 3; default: return 0; // 不会触发仅为编译通过 } } int main() { int maxScore 0; // 枚举第一件物品从Coin到Potion for (int i 0; i static_castint(Item::Count); i) { Item item1 static_castItem(i); // 枚举第二件物品 for (int j 0; j static_castint(Item::Count); j) { Item item2 static_castItem(j); // 枚举第三件物品 for (int k 0; k static_castint(Item::Count); k) { Item item3 static_castItem(k); // 计算当前组合分数 int current getScore(item1) getScore(item2) getScore(item3); // 更新最大值 if (current maxScore) { maxScore current; } } } } cout 最大总分 maxScore endl; // 输出15 return 0; }四、为什么用枚举类型更好对比传统的 “数字枚举”强类型枚举的优势一目了然1.逻辑 “可视化”避免混淆如果直接用数字3 层循环的i、j、k代表什么111又对应什么组合而用Item::Gem一眼就知道是 “宝石”GemGemGem的组合逻辑清晰可见。2.强类型检查减少 bug如果不小心把Item::Coin写成4编译器会直接报错而传统数字枚举会默默接受错误值导致逻辑漏洞。3.扩展性强方便维护如果题目新增 “钻石” 物品只需在枚举中加一行Diamond修改getScore函数即可无需改动循环逻辑 —— 因为循环依赖的是Item::Count这个 “哨兵值”自动适配枚举总数。五、总结枚举类型是算法的 “语义化工具”在 “游游的礼盒” 这类枚举问题中枚举类型的作用远不止 “给数字起名字”它更像一个 “语义化工具”把抽象的枚举逻辑 “翻译” 成人类能快速理解的语言同时通过强类型检查保障代码正确性。谢谢

相关新闻

DIY 7英寸副屏:低成本扩展桌面空间,打造专属信息看板

DIY 7英寸副屏:低成本扩展桌面空间,打造专属信息看板

1. 项目缘起:为什么需要一个“副屏”?作为一名长期与代码、设计稿和多个文档窗口打交道的开发者,我几乎每天都在和屏幕空间不足作斗争。主显示器上,IDE、浏览器、终端、通讯软件、设计工具挤作一团,频繁的窗口切换不仅…

2026/10/20 2:13:45 阅读更多 →
ModTheSpire终极指南:5分钟为《杀戮尖塔》开启无限模组世界

ModTheSpire终极指南:5分钟为《杀戮尖塔》开启无限模组世界

ModTheSpire终极指南:5分钟为《杀戮尖塔》开启无限模组世界 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire 你是否厌倦了《杀戮尖塔》一成不变的玩法?想添加新角…

2026/10/18 21:02:49 阅读更多 →
航天术语翻译:从精确性到工程实践的挑战与流程

航天术语翻译:从精确性到工程实践的挑战与流程

1. 从“黑话”到“行话”:为什么专业术语翻译是航天的命门在航空航天这个领域待久了,你会发现,工程师和技术人员之间交流,用的几乎是一套自成体系的“黑话”。从“静不稳定”到“热障”,从“比冲”到“羽流”&#xff…

2026/10/20 10:31:15 阅读更多 →

最新新闻

AI编程项目如何避免90天腐烂?构建可验证迭代闭环

AI编程项目如何避免90天腐烂?构建可验证迭代闭环

1. 这不是危言耸听:AI编程项目“烂掉”的真实时间线“你的 AI 编程项目迟早会烂掉,除非你做了这件事”——这句话刚在某技术社区刷屏时,我正盯着一个上线才三个月的智能代码补全插件发呆。它最初能准确预测87%的函数调用,现在连基…

2026/10/20 21:01:55 阅读更多 →
云真机CLI化:用adb命令无缝接入云端设备实现自动化测试

云真机CLI化:用adb命令无缝接入云端设备实现自动化测试

1. 从"云真机只能网页点点点"到CLI接管:这个项目要解决的问题做Android开发或者测试的同行应该都有这种经历:手头的真机就那几台,系统版本覆盖不全,异构屏占比机型更是一机难求。遇到需要验证老版本兼容性、多机型回归、…

2026/10/20 21:01:55 阅读更多 →
C++学习之命名空间详解

C++学习之命名空间详解

前言 命名空间(namespace)解决的是「名字冲突」这个古老问题。两个库都提供了 init(),两个头文件都定义了 Node,如果没有命名空间,把它们放进同一个程序就会撞名。C 的做法是把名字放进不同的作用域容器,用…

2026/10/20 21:01:55 阅读更多 →
Hadoop开发环境搭建实战:Eclipse集成与WordCount调试

Hadoop开发环境搭建实战:Eclipse集成与WordCount调试

1. 为什么还要回头啃 Hadoop 环境搭建这块硬骨头大数据入门这条路上,有个特别有意思的现象:很多人能跟你聊明白 MapReduce 的 Shuffle 过程,能画得出 HDFS 的架构图,但真让他从零把一套本地开发环境跑起来,立马卡壳。我…

2026/10/20 21:01:55 阅读更多 →
Hadoop入门实战:从伪分布式环境搭建到WordCount完整跑通

Hadoop入门实战:从伪分布式环境搭建到WordCount完整跑通

1. 为什么我要重新认真梳理Hadoop入门这件事大数据这个词现在几乎成了每个技术团队的标配,不管你是做后端、做数据分析还是做运维,只要公司数据量一上来,Hadoop这三个字就绕不开。但说实话,我见过太多人卡在入门这一步——不是被M…

2026/10/20 21:01:55 阅读更多 →
多模态情绪识别与情感计算在心理咨询中的落地实践

多模态情绪识别与情感计算在心理咨询中的落地实践

我最早接触情感计算在心理咨询里的应用,是陪着一位做咨询师督导的朋友复盘一段录像。录像里,来访者全程语气平稳、表情克制,嘴里反复说着“都还好、能应付”。朋友凭二十年的临床经验判断这人状态不对,但被问到具体哪里不对&#…

2026/10/20 21:00:51 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →