ACM编程入门:菜鸟常犯的21个错误与筛选法解析

需积分: 50 3 下载量 104 浏览量 更新于2024-08-20 收藏 517KB PPT 举报
"本资源主要讲解了ACM竞赛中新手常犯的21个经典错误,特别是在C语言编程中,特别提到了筛选法作为解决部分问题的策略。" 在这次的第十二讲中,主题聚焦于"菜鸟之伤——ACM菜鸟的21个经典错误",其中穿插了一个附录——筛选法。ACM(国际大学生程序设计竞赛)是一项对参赛者编程技能和算法理解能力要求极高的比赛,对于新手来说,往往会在一些基础问题上犯错。讲师通过具体的例子来指出这些错误,并提供了解决方案。 首先,错误示例1展示了一个无法处理多组输入数据的问题。在处理这类问题时,通常需要读取直至文件结束,而初学者可能忽略这一点。给出的代码片段虽然可以计算两数之和,但只能处理单组输入。正确的做法是使用一个循环结构,如示例2所示,通过检查`scanf()`函数的返回值是否为EOF(文件结束符)来判断是否还有更多输入。 错误示例2中,尽管使用了`while(scanf(...) != 0)`的循环结构,但由于EOF的值是-1而非0,可能导致无限循环,从而导致超时错误(Time Limit Exceeded, TLE)。这是许多选手容易忽视的一个细节,即使是有经验的程序员也可能因此出错。 错误示例3涉及的是语法层面的问题,即在while或for循环条件后意外添加了分号,这会导致循环体只执行一次。尽管这样的错误不会导致编译错误,但在运行时会引发预期之外的行为。为了避免这种情况,程序员应当养成良好的代码审查习惯,尤其是在处理循环结构时。 筛选法是一种常用的算法,特别是在数据处理和排序问题中。虽然资源中并未详细解释筛选法,但通常它指的是诸如埃拉托斯特尼筛法(Sieve of Eratosthenes)之类的算法,用于找出给定范围内的所有素数。在ACM竞赛中,筛选法可能会被用来优化某些数学或数论问题的解决方案,提高算法效率。 这一讲强调了在ACM竞赛编程中常见的错误,如处理多组数据、理解EOF、注意循环语法以及合理运用算法策略等,这些都是新手在学习C语言编程时应特别关注的要点。通过识别并改正这些错误,新手可以提高自己的编程技能和解决问题的能力。