OI?原来这么简单-语法算法入门篇

发布时间:2026/7/25 15:25:36
OI?原来这么简单-语法算法入门篇 OI原来这么简单 - 语法算法入门篇什么是OI为什么值得学OIOlympiad in Informatics信息学奥林匹克竞赛听起来像是天书其实它就是一场用代码解谜的智力游戏。想象一下你有一个问题需要用计算机程序在最短时间内找到答案这就是OI的核心。它不要求你写复杂的商业软件而是训练你用算法思维解决逻辑问题。很多同学觉得OI难是因为一上来就面对“动态规划”“图论”这种大词但别怕今天我们从零开始用最基础的语法和简单算法让你发现OI其实可以很“接地气”。学习OI的好处不只是竞赛获奖。它能锻炼你的逻辑能力、问题分解能力甚至让你在写代码时更“聪明”。比如为什么有些程序运行快有些慢为什么同样的功能有人写10行有人写100行这些答案就在算法和数据结构里。现在让我们从第一行代码开始## 入门第一步基础语法和输入输出任何编程语言比如C、Python都是OI的武器但Python因其简洁语法最适合入门。我们先学最核心的变量、输入、输出。### 代码示例1Hello, OI! 和简单计算python# 这是注释不会被执行# 1. 输出在屏幕上打印文字print(Hello, OI!) # 打印字符串# 2. 输入让用户输入一个数字name input(请输入你的名字) # input() 读取字符串print(你好, name) # 逗号分隔多个输出# 3. 数值计算a int(input(请输入第一个数)) # input返回字符串用int转为整数b int(input(请输入第二个数))sum_result a bprint(两数之和是, sum_result)# 4. 简单条件判断if sum_result 10: print(和大于10不错)else: print(和小于等于10继续加油)这段代码展示了OI中最常见的操作读取输入、输出结果、做简单计算。你可能会问“这跟OI有什么关系” 别急很多OI题目第一步就是处理输入输出比如“输入两个整数输出它们的和”。是的有时候就这么简单但更复杂的题目会在此基础上叠加算法。## 核心算法入门暴力枚举和模拟OI中最基础的算法是“暴力枚举”和“模拟”。暴力枚举就是尝试所有可能直到找到答案模拟则是按照题目规则一步步执行。听起来像笨办法但很多题目用它们就能解决尤其是在数据规模小的时候。### 代码示例2枚举找质数假设题目是“输入一个正整数n输出所有小于等于n的质数。” 我们可以用暴力枚举法从2到n每个数判断它是否为质数。判断质数的方法检查这个数能否被2到它的平方根之间的任何数整除。pythonimport math # 导入数学库用于sqrt平方根def is_prime(num): 判断一个数是否为质数 if num 2: return False # 只需检查到平方根 for i in range(2, int(math.sqrt(num)) 1): if num % i 0: # 如果能整除说明不是质数 return False return Truen int(input(请输入一个正整数n))print(f小于等于{n}的质数有)# 暴力枚举所有数for candidate in range(2, n 1): if is_prime(candidate): print(candidate, end ) # end 让输出在一行print() # 换行这个例子体现了OI的思想明确规则 → 逐个尝试 → 输出结果。虽然代码简单但它是很多复杂算法的基础。比如当你需要找出所有可能的密码组合时用的就是枚举当你需要模拟一个游戏过程时用的就是模拟。初学者往往低估这种“笨方法”的力量但请记住先让程序跑起来再优化## 从暴力到优化为什么要学算法你可能觉得“暴力枚举都能搞定为什么还要学更难的算法” 来看一个例子假设题目要找1到100万之间的质数暴力枚举每个数并判断可能需要几秒甚至几分钟取决于机器。而如果使用“埃拉托色尼筛法”只需几十毫秒。这就是算法的魅力用更聪明的方法换取更快的速度。OI中常见的优化方向包括-时间复杂度代码运行的速度比如从O(n²)降到O(n log n)-空间复杂度代码使用的内存比如用数组代替递归但作为入门你不需要一步登天。先掌握暴力枚举再逐步学习排序冒泡排序、快速排序、搜索二分查找、动态规划等。记住理解每个算法的“为什么”比背代码更重要。## 实战小练习模拟一个简单的“猜数字”游戏题目计算机随机生成一个1-100之间的整数用户每次猜一个数程序提示“大了”或“小了”直到猜中。统计猜的次数。pythonimport random # 随机数库# 生成目标数字target random.randint(1, 100)guess_count 0print(猜数字游戏开始范围1-100)while True: # 无限循环直到猜中 guess int(input(请输入你的猜测)) guess_count 1 if guess target: print(小了再大一点) elif guess target: print(大了再小一点) else: print(f恭喜猜中了用了{guess_count}次) break # 退出循环这个游戏用到了循环、条件判断、随机数这些都是OI的基础。它虽然简单但展示了“模拟”的过程按照游戏规则一步步执行直到达到目标。## 总结OI入门没那么可怕今天我们学习了1.基础语法输入输出、变量、条件判断、循环2.暴力枚举尝试所有可能的笨办法但有效3.模拟按规则一步步执行OI的核心不是背代码而是把问题分解成计算机能执行的步骤。当你遇到一个题目时先问自己“如果我是计算机我该怎么做” 然后从最简单的方法开始写代码。等你能跑通暴力解法后再考虑优化。学习OI就像建房子语法是砖块算法是图纸。先学会搬砖写基础代码再学会看图纸理解算法最后才能设计出自己的建筑。别被“动态规划”“图论”这些词吓倒它们不过是更复杂的图纸而已。从今天开始打开你的编程环境写一个“Hello, OI!”再试着自己实现一个枚举算法。你会发现原来OI这么简单而且这么有趣