[https://www.youtube.com/watch?v=kYnxhECu65o:embed:cite]
本视频将从2025年度基本资讯技术员考试科目B公开试题中,彻底讲解第2题“求硬币组合数的函数”。本题要求编写一个函数 change,它接收一个大于 10 的整数 n 作为参数,返回使用 1 日元、5 日元和 10 日元硬币刚好支付 n 日元时的全部组合数。题目通过让我们填写函数 change 中的空格,浓缩了科目B中高频出现的算法与程序设计基础知识。 在本视频中,我们会结合解说网站上的内容,一步一步追踪程序的执行过程,细致说明逻辑流程以及边界条件的重要性。 首先,我们会理解算法的基本结构。程序从“10 日元硬币的使用枚数”为 0 枚开始,逐渐增加 10 日元硬币的枚数。每当固定一种 10 日元硬币的枚数时,就计算剩余金额在只使用 1 日元和 5 日元硬币时的所有组合数,最后将这些结果全部相加,得到总的组合数。对于“只使用 1 日元和 5 日元硬币”的情况,我们也会详细解释,为何可以通过“将剩余金额除以 5 的商再加 1”来求出组合数。 接着,我们会用具体的计算例来检验程序的运行。以 12 日元时共有 4 种组合、22 日元时共有 9 种组合为例,分步骤追踪计算过程,清楚地展示在“使用 10 日元硬币”和“不使用 10 日元硬币”的情况下,剩余金额是如何变化的。 随后,我们将重点说明 while 循环条件设置正确与否的重要性。正确的条件应该是「rest ≧ 0」,也就是说,当剩余金额正好为 0 日元时,这种情况也必须作为一种有效的组合计入结果。如果误写为「rest >0」,那么当剩余金额变为 0 日元时就不会被计数,导致例如在 20 日元的情况下,原本应该有 9 种组合却只得到 8 种。如何处理这一“边界条件”,正是本题最核心的考点。 在基本资讯技术员考试科目B中,不仅要求理解程序的结构,还要求能够准确把握变量的变化以及条件表达式的含义。希望通过本视频的讲解,帮助大家加深对算法的理解,扎实提升在科目B中的得分能力。