在2020年的第七届蓝桥杯CC++竞赛的B组中,我们遇到了两道有趣的编程题目。第一题名为"煤球数目",考察了数组和递归的概念。题目描述了一个三角棱锥形状的煤球堆,每一层煤球数量构成一个等差数列,即第i层有i个煤球。这是一个典型的求前n项和的问题,可以用动态规划的思想解决。通过设置一个数组a,初始化为0,然后用双重for循环,外层循环控制层数,内层循环累加当前层的煤球数,即a[i] = a[i-1] + i。最后,将所有层数的煤球数相加得到答案,即171700个煤球。
第二题是"生日蜡烛",涉及到简单的枚举和判断。题目要求找出一个人从何时开始每年庆祝生日,且每年吹熄的蜡烛数与其年龄相同,直到总共吹熄236根蜡烛。由于题目的设定存在漏洞(即考虑到了可能有人一口气过了多个生日),实际上可以通过暴力搜索的方式,从1岁开始枚举可能的起始年龄(start),然后检查是否能连续吹灭蜡烛直至236根,如果能找到这样的组合,start即为答案,即26岁。对于这个题目,虽然题目设计上可能不是ACM竞赛的标准,但在蓝桥杯这类注重实践能力的比赛中,可以直接通过简单枚举得出结果。
这两道题都强调了基础算法和编程思维在实际问题中的应用,特别是动态规划和枚举法,是程序员必备的基本技能。同时,它们也提醒我们在面对看似复杂但逻辑清晰的问题时,要学会简化分析,找到解决问题的关键步骤。通过这两个问题,参赛者不仅锻炼了解决实际问题的能力,还提升了解决问题的效率和策略选择。